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 ...
随机推荐
- Doris
Doris 基本概念 Doris 是基于 MPP 架构的交互式 SQL 数据仓库,主要用于解决近实时的报表和多维分析. Doris 分成两部分 FE 和 BE ,FE 负责存储以及维护集群元数据.接收 ...
- 导出exe的经验
安装pyinstaller 首先要找到scripts的绝对路径(主要是找到scripts就行了 先是安装C:\Users\96290\AppData\Local\Programs\Python\Pyt ...
- 《awk中文手册》-本人参考官方手册翻译
01. 简介 AWK是一个文本(面向行和列)处理工具,同时它也是一门脚本语言. AWK其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernigha ...
- 参数模型检验过滤器 .NetCore版
最近学习 .NETCore3.1,发现过滤器的命名空间有变化. 除此以外一些方法的名称和使用方式也有变动,正好重写一下. 过滤器的命名空间的变化 原先:System.Web.Http.Filters; ...
- ryu安装
$ python3 -V Python 3.7.2 $ git clone https://github.com/faucetsdn/ryu.git $ cd ryu $ sudo pip3 inst ...
- 风险识别系统-大数据智能风控管理平台-企业风控解决方案– 阿里云 https://www.aliyun.com/product/saf
风险识别系统-大数据智能风控管理平台-企业风控解决方案– 阿里云 https://www.aliyun.com/product/saf
- vscode 远程开发安装
1 首先windows 有ssh 程序 2 没有的话就直接使用git bash 登录到远程服务器开发机上 3 再开一个Git bash 执行 ssh-keygen.exe 生成秘钥 然 ...
- 活动精彩实录 | 王峰:Cassandra在360的多场景应用及未来趋势
点击此处观看完整活动视频 大家好,我是360的王峰,我今天主要通过Cassandra在多场景下的应用来介绍一下Cassandra在360落地的情况. 我会从以下这几个方面进行介绍.首先介绍下Cassa ...
- loj10001种树
好久不写博客了,发现不好找做过和题!还得接着写啊! ------------------------------------------------------------------ 题目描述 某条 ...
- 存储型XSS
DVWA系列(二)存储型XSS https://www.imooc.com/article/284686 网络安全:存储型XSS https://blog.csdn.net/qq_41500251/a ...