POJ 2356 Find a multiple 鸽巢原理
来源:互联网 发布:java date转换成月 编辑:程序博客网 时间:2024/05/21 17:10
来源:http://poj.org/problem?id=2356
题意:有n个数,求是否存在一些数的和是n的倍数。若存在,输出即可。不存在,输出0.
思路:鸽巢原理的题目,组合数学课本上的原题。可以把和求出来,然后对n取余,因为有n个和,对n取余,如果余数中没有出现0,根据鸽巢原理,一定有两个数的余数相同,两个和想减就是n的倍数。如果余数出现0,自然就是n的倍数。也就是说,n个数中一定存在一些数的和是n的倍数。求余输出即可。
代码:
#include <iostream>#include <cstdio>#include <string.h>using namespace std;#define CLR(arr,val) memset(arr,val,sizeof(arr))const int N = 10010;int num[N],sum[N],pos[N];bool flag[N];int main(){//freopen("1.txt","r",stdin);int n;while(scanf("%d",&n) != EOF){CLR(num,0);CLR(sum,0);CLR(pos,-1);CLR(flag,false); for(int i = 1; i <= n; ++i){ scanf("%d",&num[i]); sum[i] = sum[i-1] + num[i]; } for(int i = 1;i <= n; ++i){ int x = sum[i] % n;if(flag[x]){ int y = pos[x]; printf("%d\n",i - y); for(int j = y+1; j <= i; ++j) printf("%d\n",num[j]); break;}if(x == 0){ printf("%d\n",i); for(int j = 1; j <= i;++j) printf("%d\n",num[j]); break;}flag[x] = true;pos[x] = i; }}return 0;}
- 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(组合数学:鸽巢原理)
- 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(鸽巢原理)
- POJ 2356:Find a multiple (鸽巢原理)
- POJ 2356 Find a multiple【鸽巢原理】
- POJ 2356 find multiple 鸽巢原理
- POJ 2356 Find a multiple [抽屉原理]
- POJ-2356 Find a multiple ----抽屉原理
- [POJ 2356]Find a multiple(抽屉原理)
- kvm虚拟机删除的快速方法 awk script
- 一些CEdit使用方法
- [转]各种网页错误代码解释(400.404.504等)
- 让Android设备永不休眠
- QTP_用eclipse第二次启动QTP遇到的问题
- POJ 2356 Find a multiple 鸽巢原理
- 本地存储
- Gentoo 中文社区邮件列表
- Mac os下android源码下载及安装
- 几种location.href的区别 js实现网页防止被iframe框架嵌套功能
- Notepad++支持列编辑模式
- java编程1
- There is no statement named uhr.rcmt.resume.domain.ApplRelation.queryCount in this SqlMap.
- C# 提示浏览选择本地文件夹 .