The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of that numbers is not greater than 15000. This numbers are not necessarily different (so it may happen that two or more of them will be equal). Your task is to choose a few of given numbers ( 1 <= few <= N ) so that the sum of chosen numbers is multiple for N (i.e. N * k = (sum of chosen numbers) for some natural number k).

Input

The first line of the input contains the single number N. Each of next N lines contains one number from the given set.

Output

In case your program decides that the target set of numbers can not be found it should print to the output the single number 0. Otherwise it should print the number of the chosen numbers in the first line followed by the chosen numbers themselves (on a separate line each) in arbitrary order.


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
这道题用到了鸠巢原理,鸠巢原理参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097
下面我借用几个上面博客的鸠巢原理内容:
 
定理 如果把n+1个物体放入n个盒子,至少有一个盒子包含两个或更多的物体。
证明 反证法 n个盒子每个盒子至多一个物品,总数至多为n,与有n+1个物体矛盾。
例 1.1
求证:整数a1,a2,a3,…,am(ai不是m的倍数),至少有两个数ai,aj除以m后余数相同。
证明:显然余数分布在1到m-1之间,共m-1种情况,而整数有m个,所以至少有两个数ai,aj除以m后余数相同。
​ 
变式 1.1.1
​求证:有理数中的无限位小数在小数点后某一位必开始循环
​证明:由有理数定义我们可设该有理数为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个数,那么我们上面的话就得以证明了^_^
 
我们接着说,有了两个数取余于n结果一样,比如是1——i的前缀和 和 1——j的前缀和 取余于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的更多相关文章

  1. Find a multiple POJ - 2356 【鸽巢原理应用】

    Problem DescriptionThe input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). E ...

  2. Mathematics:Find a multiple(POJ 2356)

    找组合 题目大意:给你N个自然数,请你求出若干个数的组合的和为N的整数倍的数 经典鸽巢原理题目,鸽巢原理的意思是,有N个物品,放在N-1个集合中,则一定存在一个集合有2个元素或以上. 这一题是说有找出 ...

  3. Find a multiple POJ - 2356 (抽屉原理)

    抽屉原理: 形式一:设把n+1个元素划分至n个集合中(A1,A2,…,An),用a1,a2,…,an分别表示这n个集合对应包含的元素个数,则:至少存在某个集合Ai,其包含元素个数值ai大于或等于2. ...

  4. Find a multiple POJ - 2356 容斥原理(鸠巢原理)

    1 /* 2 这道题用到了鸠巢原理又名容斥原理,我的参考链接:https://blog.csdn.net/guoyangfan_/article/details/102559097 3 4 题意: 5 ...

  5. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  6. POJ 2356 Find a multiple 抽屉原理

    从POJ 2356来体会抽屉原理的妙用= =! 题意: 给你一个n,然后给你n个数,让你输出一个数或者多个数,让这些数的和能够组成n: 先输出一个数,代表有多少个数的和,然后再输出这些数: 题解: 首 ...

  7. POJ 2356 && POJ 3370 鸽巢原理

    POJ 2356: 题目大意: 给定n个数,希望在这n个数中找到一些数的和是n的倍数,输出任意一种数的序列,找不到则输出0 这里首先要确定这道题的解是必然存在的 利用一个 sum[i]保存前 i 个数 ...

  8. [POJ 2356] Find a multiple

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6535   Accepted: 2849   ...

  9. poj 2356 Find a multiple(鸽巢原理)

    Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...

随机推荐

  1. js的函数-function

    function函数 function的英文是[功能],[数] 函数:职责:盛大的集会的意思 在js里,就是函数的意思.在Java里叫做方法. 定义函数 function fun(参数){ //函数体 ...

  2. requests +httprunne r

    1.get 请求和 post 请求的区别是什么?  2.requests 模拟 get 请求时,有哪两种方式让响应的结果不是乱码?(直接代码描述)  3.requests 库中的 post 方法,参数 ...

  3. 【Oracle】win7安装报错

    在WIN7上安装oracle 10g时,提示如下信息: 正在检查操作系统要求... 要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1 检查完成.此次检查的总体结果为: 失败 &l ...

  4. gears-绕过rbash

    0x00 信息收集 0x01 smb攻击 crunch 生成密码的一个软件 @%%,这个是给的密码参数. crunch 4 4 -t @%%, -o words 最小4位,最长 4位 fcrackzi ...

  5. 一文读懂 TKE 及 Kubernetes 访问权限控制

    你有了解过Kubernetes的认证授权链路吗?是否对TKE的权限控制CAM策略.服务角色傻傻分不清楚?本文将会向你介绍腾讯云TKE平台侧的访问控制.Kubernetes访问控制链路,以及演示如何将平 ...

  6. 网络流量预测入门(一)之RNN 介绍

    目录 网络流量预测入门(一)之RNN 介绍 RNN简介 RNN 结构 RNN原理 结构原理 损失函数$E$ 反向传播 总结 参考 网络流量预测入门(一)之RNN 介绍 了解RNN之前,神经网络的知识是 ...

  7. centos&linux

    who am i 查看是哪一个用户 init 0关机 ifconfig用于配置网络或显示当前网络接口的状态 eth0是网卡的名字 第一行:flags后面的up指的是网卡处于运行状态,running连接 ...

  8. CentOS系统内核升级(在线 离线)

    为什么要升级内核? Docker 在CentOS系统中需要安装在 CentOS 7 64 位的平台,并且内核版本不低于 3.10:CentOS 7.× 满足要求的最低内核版本要求,但由于 CentOS ...

  9. 使用pushplus+python实现亚马逊到货消息推送微信

    xbox series和ps5发售以来,国内黄牛价格一直居高不下.虽然海外amazon上ps5补货很少而且基本撑不过一分钟,但是xbox series系列明显要好抢很多. 日亚.德亚的xbox ser ...

  10. python(paramiko模块的简单使用)

    #通过paramiko模块连接主机运行bash命令 import paramiko hostname = '192.168.88.31' port = 22 username = 'root' pas ...