poj 2356 Find a multiple——鸽巢原理
2011-09-10 20:55
369 查看
由于这个题是spj,所以只要在连续的里面找就可以了。
开一个sum数组,sum[i]记录前i个数的和。如果sum[i]%n==0,那么直接用这i个数就可以了。如果没有等于零的,由于n的最小非负剩余系除去零有n-1个数,而sum总共有n个位置,那么一定有最少两个sum的值是一样的
开一个sum数组,sum[i]记录前i个数的和。如果sum[i]%n==0,那么直接用这i个数就可以了。如果没有等于零的,由于n的最小非负剩余系除去零有n-1个数,而sum总共有n个位置,那么一定有最少两个sum的值是一样的
a27400 | 2356 | Accepted | 284K | 47MS | C++ | 812B | 2011-09-10 18:31:22 |
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> int a[10010]; int visit[10010]; int sum[10010]; void print(int i,int j) { // printf("ij:%d %d\n",i,j); printf("%d\n",j-i+1); int k; for(k=i;k<=j;k++) { printf("%d\n",a[k]); } return ; } int main(void) { int n; while(scanf("%d",&n)==1) { memset(a,0,sizeof(a)); memset(visit,0,sizeof(visit)); memset(sum,0,sizeof(sum)); int i; for(i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]+=(sum[i-1]+a[i])%n; } for(i=1;i<=n;i++) { if(sum[i]==0) { print(1,i); break; } else { if(visit[sum[i]]) { print(visit[sum[i]]+1,i); break; } else { visit[sum[i]]=i; } } } } return 0; }
相关文章推荐
- poj2356 Find a multiple(鸽巢原理)
- POJ 2356 Find a multiple (鸽巢原理)
- POJ 2356 Find a multiple 鸽巢原理
- POJ 题目2356 Find a multiple(鸽巢原理)
- POJ 2356 Find a multiple(鸽巢原理(抽屉原理))
- poj 2356 Find a multiple(鸽巢原理+标记)
- poj2356 Find a multiple(鸽巢原理)
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
- Find a multiple POJ - 2356 鸽巢原理
- POJ 2356 Find a multiple 鸽巢原理
- POJ-2356 Find a multiple(鸽巢原理)题目数据太垃圾了!!
- poj 2356 Find a multiple(鸽巢原理)
- POJ 2356 Find a multiple 鸽巢原理pigeon hole题解
- POJ 2356 Find a multiple(鸽巢原理)
- poj 2356 Find a multiple(组合数学:鸽巢原理)
- POJ 2356 Find a multiple 鸽巢原理
- POJ:2356 Find a multiple(鸽巢原理)
- poj 2356 Find a multiple[鸽巢原理]
- POJ 2356:Find a multiple (鸽巢原理)
- 鸽巢原理:hdu 1205 吃糖果+poj 2356 Find a multiple+poj 3370 Halloween treats