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

 

你可能感兴趣的:(zcmu,思维)