| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大家不要被样例欺骗 其实这个是鸽巢原理 去看组合数学书吧#include <iostream>
using namespace std;
#define MAXN 100000
int a[MAXN], ind[MAXN];
int main()
{
int c, n;
while(scanf("%d %d",&c,&n) == 2 && (n || c))
{
for (int i=0; i<c; ++i)
ind[i] = -1;
for (int i=0; i<n; ++i)
{
scanf("%d",&a[i]);
}
int sum = 0;
ind[0] = 0;
bool found = false;
for (int i=0; i<n; ++i)
{
sum = (sum + a[i]) % c;
if (ind[sum] >= 0)
{
int checksum = 0;
for (int j=ind[sum]; j<=i; ++j)
{
checksum = (checksum+a[j])%c;
printf("%d",j+1);
if (j < i) printf(" ");
else puts("");
}
found = true;
break;
}
ind[sum] = i+1;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator