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;
    }
    

      

  • 相关阅读:
    html常用标签_new
    Nginx缓存
    购物车
    css的属性选择
    前端基础之css
    htm基础知识
    TypeScript(1)为什么需要TypeScript
    Electron
    Ant Design
    Umi
  • 原文地址:https://www.cnblogs.com/Zinn/p/8440028.html
Copyright © 2011-2022 走看看