UESTC 1014 The King and King boss 鸽巢原理

117 篇文章 2 订阅
53 篇文章 0 订阅

The King and King boss

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

王和王老板总是在向大家传授什么是美。今天,王老板要为趣味赛出题,他想出了一个很美的问题:“给你一个包含 n 个元素的整数集合 a1an ,

问你是否可以找到它的一个子集,使得这个子集的和可以被 n 整除”

听到了这个问题后,王暗想“这是个非常简单的问题,我可以设计一个动态规划算法在线性时间复杂度内轻松解决”,但他口头上依然称赞这是个非常好

的问题。当然,王不打算亲自解决(这题太水啦!),他用不容拒绝的口吻命令你完成它。

Input

第一行是整数集合的大小 n(1n10000)

第二行包含 n 个整数 a1an ,且每个数都小于 10000(ai10000)

Output

如果存在上述的一个子集,输出Yes,否则输出No(注意大小写)。

例子:如果给你三个数的集合{ 2,4,4     },你可以非常轻松地看出,子集{ 2,4   }的和为 6 可以被 3  整除,所以会毫不犹豫地输出Yes

Sample input and output

Sample Input Sample Output
3
2 4 4
Yes

My Solution


这个题目主要是自己分析吧,看下题目的数量级和答案的格式,是在叫我们好好分析了
(x1) mod n
(x1+x2) mod n
(x1+x2+x3) mod n
(...... ...... ......) mod n
(x1+x2+x3+x4+......xn) mod n 

1) 当上面的n个数各不相等是,显然Yes;
2)当至少有两个是相等的时候,比如{x1,......x j }  、 {x1,......x i } 设 j > i ;
则前者减后者得 {x i+1,......x j } 其值为0,(0 % n) ==0   显然Yes
综上 必为 Yes

#include <iostream>
#include <string>
#include <cstdio>
int main()
{
    int n;
    scanf("%d",&n);
    std::string str;
    getchar();
    getline(std::cin,str);
    printf("Yes");
    return 0;
}

或者
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=10000+8;
int A[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&A[i]);
    printf("Yes");
    return 0;
}

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值