Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 6452   Accepted: 2809   Special Judge

Description

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
 /*这题在于对抽屉原理的应用,输入一个数N,然后有N行,每一行输入一个数,*/
/*求是否存在连续和能够整除N的数,并且输出该数的个数以及连续数*/
/*
抽屉原理:主要是用来求数列的某一段连续和能够整除该数列个数的问题;
先累每一个数,记录在Sum中,设i>j,则sum[i]-sum[j]则表示位置i到位置j这一段区间的和,
题目既可以简化为求(sum[i]-sum[j])%N==0的满足条件即可
所以设q,p(倍数),r1,r2(余数)为整数,
sum[i]=q*N+ri,sum[i]=p*N+rj;
ri=Sum[i]%N (ri为余数)
(sum[i]-sum[j])=>(q*N+ri)-(p*N+rj)=>(q-p)*N+(ri-rj)
既为:(sum[i]-sum[j])%N==0=>((q-p)*N+(ri-rj))%N==0
=>(ri-rj)%n==0=>ri=rj可以使得等式成立,可满足条件;
所以只需要求解存在两个ri和rj相等,就可以知道,该段位置从i+1累加到j能够被N整除
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int Num[]; /*记录输入数据*/
int Sum[]; /*记录数据的累加和*/
int Sign[]; /*记录该数据累加和取余后的情况,sign[i],0<=i<N*/
int ID[]; /*ID[i]表示该余数是否被出现过了,记录每一个余数第一次产生i的位置,且ID[0]=0*/
int Begin,End,Flat,i,N; /*Flat标记是否完成任务*/
while(scanf("%d",&N)!=EOF)
{
memset(Sum,,sizeof(Sum));
memset(ID,-,sizeof(ID)); /*因为ID存放的是该数的位置,需要初始化为-1,*/
ID[]=;/*记得标记初始位置的*/
for(i=,Flat=;i<=N;i++)
{
scanf("%d",&Num[i]);
Sum[i]=Sum[i-]+Num[i]; /*求累加和*/
Sign[i]=Sum[i]%N; /*求累加和的余数*/
if(ID[Sign[i]]>=&&Flat) /*判断该位置是否被使用过,且是否完成任务*/
{
Begin=ID[Sign[i]]; /*记录开始点*/
End=i; /*记录结束点*/
Flat=;
}
else if(Flat)
ID[Sign[i]]=i; /*如果该余数未被产生,则记录下该余数第一次出现的位置*/
}
printf("%d\n",End-Begin);
for(i=Begin+;i<=End;i++)
{
printf("%d\n",Num[i]);
} }
return ;
}

POJ- Find a multiple -(抽屉原理)的更多相关文章

  1. POJ 2356 Find a multiple 抽屉原理

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

  2. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...

  3. POJ2356 Find a multiple 抽屉原理(鸽巢原理)

    题意:给你N个数,从中取出任意个数的数 使得他们的和 是 N的倍数: 在鸽巢原理的介绍里面,有例题介绍:设a1,a2,a3,……am是正整数的序列,试证明至少存在正数k和l,1<=k<=l ...

  4. POJ 3370 Halloween treats(抽屉原理)

    Halloween treats Every year there is the same problem at Halloween: Each neighbour is only willing t ...

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

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

  6. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

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

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

  8. poj 2356 (抽屉原理)

    题目链接:http://poj.org/problem?id=2356 题目大意:给你n个数,要你从n个数选出若干个数,要求这若干个数的和是n的倍数,输出选择数的个数,以及相应的数. 解题思路: 以下 ...

  9. POJ-2356 Find a multiple(DFS,抽屉原理)

    Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7133 Accepted: 3122 Speci ...

随机推荐

  1. ExceptionDemo

    功能: 利用struts.xml 捕获异常  不满足这三个值就报异常 1.web.xml <?xml version="1.0" encoding="UTF-8&q ...

  2. 初始化一个本地GIT仓储

    简单总结下 // 定位到仓储文件夹目录 $ cd /dir // 初始化本地仓储 $ git init ``` 添加本地GIT忽略清单文件.gitignore```// 添加OS X中系统文件.DS_ ...

  3. python中的pip安装

    windows下安装PIP 当前环境(windows 7,python安装路径为c:\Python) 1.首先到官网下载(https://pypi.python.org/pypi/setuptools ...

  4. PAT 团体程序设计天梯赛-练习集 L1-018. 大笨钟

    微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.不过由于笨钟自己作息也不是很规律,所以敲钟并不定时.一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那 ...

  5. PHP数据类型转换(字符转数字,数字转字符)

    PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: (int).(integer):转换成整形 (float).(double).(real):转换成浮点型 (string):转换成字符串 ...

  6. ckplayer 参数设置详解

    参数   使用说明 f s=0时地为普通的视频地址s=1时是一个网址,网址里存放视频地址s=2时是一个网址,网址里输出xml格式的视频地址s=3时是一个swf文件地址,swf和播放器进行交互读取地址 ...

  7. 4、Web应用程序中的安全向量 -- over-posting(重复提交)

    模型绑定是ASP.NET MVC提供的强大功能,可遵照命名约定将输入元素映射到模型属性,从而极大地简化了处理用户输入的过程,然而,这也成为了攻击的另一种没接,给攻击者提供了一个填充模型属性的机会,右下 ...

  8. MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法

    发生System.Data.Entity.Validation.DbEntityValidationException这个异常的时候,如果没有用特定的异常类去捕捉,是看不到具体信息的. 通常都是用Sy ...

  9. NOIP2010-普及组复赛模拟试题-第二题-数字积木

    题目描述 Description 小明有一款新式积木,每个积木上都有一个数,一天小明突发奇想,要是把所有的积木排成一排,所形成的数目最大是多少呢?你的任务就是读入 n 个数字积木,求出所能形成的最大数 ...

  10. Hanoi汉诺塔问题——递归与函数自调用算法

    题目描述 Description 有N个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱子上无盘子),但绝不允 ...