Find a multiple POJ - 2356
Input
Output
If there are more than one set of numbers with required properties you should print to the output only one (preferably your favorite) of them.
Sample Input
5
1
2
3
4
1
Sample Output
2
2
3
证明 反证法 n个盒子每个盒子至多一个物品,总数至多为n,与有n+1个物体矛盾。
例 1.1
求证:整数a1,a2,a3,…,am(ai不是m的倍数),至少有两个数ai,aj除以m后余数相同。
证明:显然余数分布在1到m-1之间,共m-1种情况,而整数有m个,所以至少有两个数ai,aj除以m后余数相同。
求证:有理数中的无限位小数在小数点后某一位必开始循环
证明:由有理数定义我们可设该有理数为N/M(N,M∈Z且M!=0),那么根据竖式除法的原则,求值过程中不断更新的是分子N的值,由于不同分子都是由上次的分子对分母取模所得知,取M个不同的分子,那么根据鸽巢原理,他们中至少有两个数关于M同余,那么下一位结果也就循环了。得证。
这道题给你了n个数,让你找这n个数中有没有几个数的和是n的倍数
你循环遍历一遍这n个数,如果某个数是n的倍数,那就输出一个1再输出这个数
如果没有的话,那就对这n个数求一下求前缀和。
1、在循环遍历一遍这个前缀和,如果某个数是n的倍数,那就输出i,再循环打印出1到i的值(这个i是我们假设的一个下标)
2、如果没有n的倍数的话,那就肯定至少有两个数取余于n的结果一样
是不是想问为什么?嘿嘿
你想一共有n个数,而且这里面没有n的倍数,那么都取余于n之后是没有0的
但是1——n这才一共n-1个数不相同,而你有n个数,那么我们上面的话就得以证明了^_^
那么i+1——j这一段所有数的和不久正是n的倍数嘛。
代码:
1 /*
2 这道题用到了鸠巢原理,我的参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097
3
4 题意:
5 这道题给你了n个数,让你找这n个数中有没有几个数的和是n的倍数
6
7 题解:
8 你循环遍历一遍这n个数,如果某个数是n的倍数,那就输出一个1再输出这个数
9 如果没有的话,那就对这n个数求一下求前缀和。
10 1、在循环遍历一遍这个前缀和,如果某个数是n的倍数,那就输出i,再循环打印出1到i的值(这个i是我们假设的一个下标)
11 2、如果没有n的倍数的话,那就肯定至少有两个数取余于n的结果一样
12 是不是想问为什么?嘿嘿
13 你想一共有n个数,而且这里面没有n的倍数,那么都取余于n之后是没有0的
14 但是1——n这才一共n-1个数不相同,而你有n个数,那么我们上面的话就得以证明了^_^
15
16 我们接着说,有了两个数取余于n结果一样,比如是1——i的前缀和 和 1——j的前缀和 取余于n的结果一样
17 那么i+1——j这一段所有数的和不久正是n的倍数嘛。
18 */
19 #include<stdio.h>
20 #include<string.h>
21 #include<iostream>
22 #include<algorithm>
23 using namespace std;
24 typedef long long ll;
25 const int maxn=10005;
26 int v[maxn],sum[maxn],p[15005];
27 int main()
28 {
29
30 int n,flag=0;
31 scanf("%d",&n);
32 for(int i=1;i<=n;++i)
33 {
34 scanf("%d",&v[i]);
35 if(v[i]%n==0)
36 {
37 flag=i;
38 }
39 sum[i]=(v[i]+sum[i-1])%n;
40 }
41 if(flag)
42 {
43 printf("1\n%d\n",v[flag]);
44 }
45 else
46 {
47 for(int i=1;i<=n;++i)
48 {
49 if(p[sum[i]])
50 {
51 printf("%d\n",i-p[sum[i]]);
52 for(int j=p[sum[i]]+1;j<=i;++j)
53 printf("%d\n",v[j]);
54 flag=0;
55 break;
56 }
57 else p[sum[i]]=i;
58 if(sum[i]==0)
59 {
60 flag=i;
61 break;
62 }
63 }
64 if(flag)
65 {
66 printf("%d\n",flag);
67 for(int i=1;i<=flag;++i)
68 printf("%d\n",v[i]);
69 }
70 }
71 return 0;
72 }
Find a multiple POJ - 2356的更多相关文章
- Find a multiple POJ - 2356 【鸽巢原理应用】
Problem DescriptionThe input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). E ...
- Mathematics:Find a multiple(POJ 2356)
找组合 题目大意:给你N个自然数,请你求出若干个数的组合的和为N的整数倍的数 经典鸽巢原理题目,鸽巢原理的意思是,有N个物品,放在N-1个集合中,则一定存在一个集合有2个元素或以上. 这一题是说有找出 ...
- Find a multiple POJ - 2356 (抽屉原理)
抽屉原理: 形式一:设把n+1个元素划分至n个集合中(A1,A2,…,An),用a1,a2,…,an分别表示这n个集合对应包含的元素个数,则:至少存在某个集合Ai,其包含元素个数值ai大于或等于2. ...
- Find a multiple POJ - 2356 容斥原理(鸠巢原理)
1 /* 2 这道题用到了鸠巢原理又名容斥原理,我的参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097 3 4 题意: 5 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2356 Find a multiple 抽屉原理
从POJ 2356来体会抽屉原理的妙用= =! 题意: 给你一个n,然后给你n个数,让你输出一个数或者多个数,让这些数的和能够组成n: 先输出一个数,代表有多少个数的和,然后再输出这些数: 题解: 首 ...
- POJ 2356 && POJ 3370 鸽巢原理
POJ 2356: 题目大意: 给定n个数,希望在这n个数中找到一些数的和是n的倍数,输出任意一种数的序列,找不到则输出0 这里首先要确定这道题的解是必然存在的 利用一个 sum[i]保存前 i 个数 ...
- [POJ 2356] Find a multiple
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6535 Accepted: 2849 ...
- poj 2356 Find a multiple(鸽巢原理)
Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...
随机推荐
- VBA实现相同行合并
帮人捣鼓了个VBA代码用来实现多行合并,具体需求为:列2/列3/列4 相同的情况下,则对应的行合并为一行,且列1用空格隔开,列5则相加: (对大多数办公室职员,VBA还算是提高效率的一个利器吧) 最终 ...
- 【Linux】zabbix4.0服务器搭建,agent搭建,及邮件使用方法
zabbix默认的 服务端监听端口为10051,而被监控端即Zabbix--agents代理程序监控10050端口. 更新yum源: yum clean all yum makecache 需要配置网 ...
- 【IMP】IMP导入表的时候,如果表存在怎么办
在imp导入的时候,如果表存在的话,会追加数据在表中, 所以如果不想追加在表中的话,需要将想导入的表truncate掉后,在imp SQL: truncate table TEST1; imp tes ...
- pod管理调度约束、与健康状态检查
pod的管理 [root@k8s-master ~]# vim pod.yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: ...
- Django Signals
信号 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置的信号 Model si ...
- 转 Fiddler5 发送HTTP请求
Fiddler5 发送HTTP请求 文章转自:https://www.cnblogs.com/zhengna/p/10879573.html 1.Fiddler Composer发送HTTP请求 C ...
- 并发编程常用工具类(一) countDownLatch和cyclicBarrier的使用对比
1.CountDownLatch countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始 ...
- mysql的安装使用及其用户管理
mysql的安装使用及其用户管理 一.mariadb安装 搭建yum源 [mariadb] name = MariaDB baseurl = http://mirrors.ustc.edu.cn/ ...
- GStreamer环境搭建篇
GStreamer是一套强大的多媒体中间件系统,跟FFmpeg功能类似. 各个Linux发行版(Ubuntu,fedora),大都集成了GStreamer相关工具,而作为软件层次结构最上层的播放器,几 ...
- 糊糊的学习笔记--Fiddle抓包
Fiddle简述 Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的&q ...