POJ-2356 Find a multiple(鸽巢原理)题目数据太垃圾了!!
2016-12-23 15:13
513 查看
题意:在给出的N个数字中找出M个数字和为N的整数倍
思路:在离散数学中鸽巢原理大概意思是,有N+1个数字放在N个盒子里必定有一个盒子有2个或者2个以上个数字..
本题如果sum[I] %n==0,那么这组数字就满足条件,如果没有一组数字是满足条件的,那么我们考虑多个数字的组合
如果前i个数字和 与前j个数字和%n相等, 那么 第i+1~j个数字的和必定是n的k倍
先给个AC的,思路正确的代码。
心疼自己写的代码。竟然AC了。然而自己造的数据都过不去。亏我想证明自己的思路的正确性。。。
垃圾数据!!!!以后想明白如何正确这个东西错误再删。。。
思路:在离散数学中鸽巢原理大概意思是,有N+1个数字放在N个盒子里必定有一个盒子有2个或者2个以上个数字..
本题如果sum[I] %n==0,那么这组数字就满足条件,如果没有一组数字是满足条件的,那么我们考虑多个数字的组合
如果前i个数字和 与前j个数字和%n相等, 那么 第i+1~j个数字的和必定是n的k倍
先给个AC的,思路正确的代码。
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm> #include <cmath> int n,m; using namespace std; int a[15001]; int sum[15001]; int save[10005]; int main() { int n; cin>>n; int num=0,ans=0,yes=0,l,r; for(int i=1; i<=n; i++) { cin>>a[i]; if(!yes) { sum[i]=(sum[i-1]+a[i]%n)%n; if(sum[i]==0) { l=1; r=i; ans=r-l+1; yes=1; } if(save[ sum[i] ] ) { l=save[sum[i]]+1; r=i; yes=1; ans=r-l+1; } save[sum[i]]=i; } } cout<<ans<<endl; for(int i=l;i<=r;i++) cout<<a[i]<<endl; } /* 2 1 1 */
心疼自己写的代码。竟然AC了。然而自己造的数据都过不去。亏我想证明自己的思路的正确性。。。
垃圾数据!!!!以后想明白如何正确这个东西错误再删。。。
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm> #include <cmath> int n,m; using namespace std; int a[15001]; int sum[15001]; int save[10005]; int main() { int n; cin>>n; int num=0,ans=0,yes=0; for(int i=1; i<=n; i++) { cin>>a[i]; if(!yes) { if(a[i]%n==0) { ans=1; yes=i; num=i; } sum[i]=(sum[i-1]+a[i])%n; if( save[ n-a[i]%n ]) { yes=i; num=save[n- a[i]%n ]; ans=1+save[n-a[i]%n]; } save[ sum[i]%n ]=i; } } cout<<ans<<endl; for(int i=1;i<=num;i++) cout<<a[i]<<endl; if(ans!=1) cout<<a[yes]<<endl; }
5 2 4 1 1 1
相关文章推荐
- POJ 题目2356 Find a multiple(鸽巢原理)
- POJ 2356 Find a multiple 鸽巢原理
- 鸽巢原理:hdu 1205 吃糖果+poj 2356 Find a multiple+poj 3370 Halloween treats
- POJ 2356 Find a multiple 鸽巢原理
- POJ 2356 Find a multiple 鸽巢原理pigeon hole题解
- POJ 2356 find multiple 鸽巢原理
- POJ 2356 Find a multiple (鸽巢原理)
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
- poj 2356 Find a multiple——鸽巢原理
- POJ 2356 Find a multiple(鸽巢原理(抽屉原理))
- poj 2356 Find a multiple(组合数学:鸽巢原理)
- POJ 2356 Find a multiple 鸽巢原理
- poj 2356 Find a multiple【鸽巢原理 模板应用】
- poj2356 Find a multiple(鸽巢原理)
- poj 2356 Find a multiple(鸽巢原理+标记)
- POJ2356 Find a multiple【鸽巢原理】
- Find a multiple (POJ - 2356 )(鸽巢原理)
- POJ:2356 Find a multiple(鸽巢原理)
- Find a multiple POJ - 2356 鸽巢原理
- poj 2356 Find a multiple(鸽巢原理)