zoukankan      html  css  js  c++  java
  • poj2356Find a multiple——鸽巢定理运用

    题目:http://poj.org/problem?id=2356

    N个数,利用鸽巢定理可知应有N+1个前缀和(包括0),因此其%N的余数一定有重复;

    同余的两个前缀和之差一定为N的倍数,据此得出答案。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,a[10005];
    long long mod[10005],s;
    int main()
    {
    	scanf("%d",&n);
    	memset(mod,-1,sizeof mod);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		s+=a[i];
    		if(s%n==0)
    		{
    			printf("%d
    ",i);
    			for(int j=1;j<=i;j++)
    				printf("%d
    ",a[j]);
    			return 0;
    		}
    		if(mod[s%n]==-1)mod[s%n]=i;
    		else
    		{
    			printf("%d
    ",i-mod[s%n]);
    			for(int j=mod[s%n]+1;j<=i;j++)
    				printf("%d
    ",a[j]);
    			return 0;
    		}
    	}
    	printf("0");
    	return 0;
    }
    

      

  • 相关阅读:
    bzoj3280
    bzoj3876
    洛谷 p1625
    bzoj1407
    bzoj1227
    bzoj1477 && exgcd学习笔记
    bzoj1345
    c#程序的config文件问题
    思维角度的重要性
    python异步初步窥探
  • 原文地址:https://www.cnblogs.com/Zinn/p/8440028.html
Copyright © 2011-2022 走看看