您的位置:首页 > 其它

寻找倍数<set集合使用>

2017-07-15 17:02 381 查看

Problem B: 寻找倍数

Time Limit: 1 Sec  Memory Limit:
128 MB
Submit: 162  Solved: 96

[Submit][Status][Web
Board]

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

25 1 2 3 4 121 2

Sample Output

Case #1: YesCase #2: Yes

HINT

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<set>
#include<cstring>
#include<string>
#include<iostream>
#include<cmath>
#include<map>
#include<vector>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
set<int> a;
int cou=1;
while(t--){
int flag=0;
a.clear();
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int s;
scanf("%d",&s);
a.insert(s);
if(s%n==0){
flag=1;
}
if(!flag){
set<int>::iterator j=a.begin();
for(;j!=a.end();j++)
{
if((*j+s)%n==0)
{
flag=1;
break;
}
a.insert((*j+s)%n);

}
}
}
if(flag==1)
printf("Case #%d: Yes\n",cou++);
else
printf("Case #%d: No\n",cou++);

}
return 0;
}


思路比较简单,输入一个数后判断能否整除,不能的话加上之前存在集合里面的值,再判断能否整除,还是不能整除的话,就把n对其的余数存在集合里面,一直遍历到最后一个元素输入完
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM OJ zcmu