标签:nyoj世界末日
5 5 3 6 7 9
YES
抽屉原理。
sum[0]=0;
sum[i]=(a[1]+a[2]+a[3]...a[i])%n;
如果存在i>0 使得sum[i]=0;则直接输出a[1],a[2],,....a[i]即可满足题意。
如果不存在,考虑sum[ j ]-sum[ i ]=a [ i+1 ],a[ i+2 ]....a[ j ]。
即如果存在sum[ j ]-sum[ i ]==0,则输出 a [ i+1 ],a[ i+2 ]....a[ j ] 即可。
接下来用抽屉原理证明 i , j 必然存在。
抽屉原理:
如果将大于n个数量的物品放入n个抽屉,则必然存在某个抽屉放了大于1个物品。
因为sum [ i ] 的值只能是1,....n-1.sum [ i ]的数量有n个。
所以由抽屉原理可知,必然存在某两个sum [ i ] 值一样。
#include<cstdio> #include<cstdlib> #include<cstring> using namespace std; char s[50000]; int main() { int n; while(scanf("%d",&n)==1){ getchar();gets(s); printf("YES\n"); } return 0; }
标签:nyoj世界末日
原文地址:http://blog.csdn.net/r1986799047/article/details/43449383