题目

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的倍数,输出取的数的个数以及每个数.如果无法取出则输出0.

题解

我们写过指数暴力,打过搜索,因为数据范围加老爷机跪掉了.我不得不看了看题解.
确实精彩.我们对数列求前缀和,如果前i个的和对n取模为0,则直接输出1-i的数,否则因为前缀和取模有n个值,但只有n-1种可能(没有0),所以必然存在2个前缀和是相同的,直接输出这两个位置之间的所有数即可.小学学的抽屉原理,到这里就忘了.

#include<cstdio>
using namespace std;
const int boss=1e4;
int a[boss+10],s[boss+10],vis[boss+10],n;//vis表示对n取模的值.
int main()
{
int i;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d",&a[i]),s[i]=s[i-1]+a[i];
vis[0]=1;//把0标记一下
for (i=1;i<=n;i++) {if (vis[s[i]%n]){int k=vis[s[i]%n];printf("%d\n",i-k+1);for (int j=k;j<=i;j++) printf("%d\n",a[j]);return 0;}vis[s[i]%n]=i+1;}
}//哈哈哈哈

POJ 2356 Find a multiple 神题 传说中的经典.相关推荐

  1. poj - 2356 Find a multiple

    http://poj.org/problem?id=2356 题意:给你n个数,找出几个数,使他们的和是n的倍数:有多少数组成 ,输出哪几个数 题解:鸽巢原理.(1)当前n项和对n取模为0 输出前n个 ...

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

    感觉这个题很不错,至少开始真的没想道可以用抽屉原理推出一个结论,然后把这题秒掉.... 已知有n个元素,sum[i]表示从1到i所有数的和...sum[i]%n可以得到一个剩余系,如果出现0,那么结果 ...

  3. 洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】

    偷个懒,题解看这里:https://www.luogu.org/problemnew/solution/P2679 看作者 GuessYCB  写的 ===2018.9.6=== 这一次算理解深一点了 ...

  4. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  5. [Bzoj4817] [Sdoi2017]树点涂色 (LCT神题)

    4817: [Sdoi2017]树点涂色 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 629  Solved: 371 [Submit][Stat ...

  6. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 177  Solved: 128 [Submit][Stat ...

  7. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  8. 博大考神 职称 计算机 看什么,word2003博大考神题库答案职称计算机2

    word2003博大考神题库答案职称计算机2 2008年07月11日 星期五 08:54 四.段落排版: 1.要求:利用"显示格式"任务窗格比较第一自然段和第三自然段中的" ...

  9. 有关古文的C语言编程题,这80道国学题,既经典又有趣!值得珍藏!

    原标题:这80道国学题,既经典又有趣!值得珍藏! 点击箭头所指的世界名著每日读,每日陪你有品位地阅读 编辑:世界名著每日读(ticesmall) 1."但愿人长久,千里共婵娟",其 ...

最新文章

  1. 【NOIP2018】 游记
  2. SAPABAP性能优化技巧—使用二分查找(Binary Search)选项
  3. 《系统集成项目管理工程师》必背100个知识点-28范围管理计划和需求管理计划...
  4. 这是我第一题AC的线段树
  5. 检查点和oracle数据库的恢复(一)SCN
  6. 史上最大最贵 iPhone 发布,支持双卡双待,附发布会完整视频!
  7. 关于C#传给视图的字符串带有Html转义字符的处理
  8. 提高数据质量的方法有哪些
  9. SQL不能以实例名连接问题处理
  10. java xml转换xsd,将java类转换成xsd文件
  11. 三维点云数据处理软件供技术原理说明_三维点云数据获取方法及获取系统技术方案...
  12. 技术界中的虚拟机、容器和沙箱的关系
  13. 搜狗站长平台没有sitemap的接口无法提交sitemap?该怎么提交?【已解决】
  14. Spring Boot微服务API网关
  15. 008 使用MyBatis,easyUI实现CRUD操作样例-CUD(CRUD完毕)
  16. 明清时期江右商的宗族教育——江西流坑村的历史人类学考察
  17. tb6600 两相四线步进电机相关参数计算关系
  18. ECharts: 绘制立体柱状图【圆柱体】
  19. Ubuntu安装.md阅读工具-Typora
  20. 【硬见小百科】一些硬件电路技术经验整理

热门文章

  1. 如何建立自己的知识体系?六步就能简单打造
  2. 五种常见的电子商务模式对比:B2B、B2C、C2B、C2C、O2O
  3. PostConstruct和PreDestroy失效
  4. 如何使用《背景音乐提取器》提取歌曲中的背景音乐
  5. 2021年全球指拨开关收入大约420.8百万美元,预计2028年达到519.8百万美元
  6. 如何全面的提升百度搜索排名?
  7. shell-批量裁剪各个尺寸的图教程一(ImageMagick安装配置)
  8. Spring Boot 实现接口的各种参数校验
  9. 知识点六:jQuery遍历-同胞Siblings(), next(), nextAll()
  10. 华科计算机博导刘云生论文,华科白翔老师团队ECCV2018 OCR论文:Mask TextSpotter