zcmu1777: 尋找倍數【抽屜原理】

1777: 尋找倍數
Description

給出n(n<=10000)個正整數,每個數xi<=15000.可以在這個n個數中選擇一些數出來,至少選擇一個,是否存在一種選擇方案使得選擇出

來的數的和是n的整數倍

 

Input

第一行一個T(T<=500),第二行一個數n,接下來n個正整數

 

Output

Case #x: y,其中x是測試編號,從1開始,y表示答案,如果存在y爲Yes,否則爲No

 

Sample Input

2 5 1 2 3 4 1 2 1 2

Sample Output

Case #1: Yes Case #2: Yes

解題思路:這題我沒想到抽屜原理,沒想到。。。

S1=a1,S2=a1+a2,S3=a1+a2+a3,......Sn=a1+a2+...+an

如果在這n個和S1,S2,Sn中,存在一個數是n的倍數,那肯定是yes。如果在n個和S1,S2...Sn中,沒有一個是n的倍數的數,那麼它們被n除所得的餘數只可能是1,2,n-1共n-1種情況,但由於S1,S2,Sn共有n個數,從而根據抽屜原理,必然存在兩個數它們被n除的餘數相同。那這2個餘數相同的相減肯定是能整除n的。

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int t,k=0;
	scanf("%d",&t);
	while(t--)
	{
		int n,a;
		scanf("%d",&n);
		for(int i=0;i<n;i++) scanf("%d",&a);
		printf("Case #%d: ",++k);
		if(n==0) printf("No\n");
		else printf("Yes\n");
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章