GDUT2017校赛:Problem H: tmk买礼物(思维)
来源:互联网 发布:网络博客是真的吗 编辑:程序博客网 时间:2024/04/27 19:43
Problem H: tmk买礼物
Description
今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下。
TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店第2147483647位顾客,本店在搞一个活动,对本店第2147483647位顾客进行赠送活动。你先看看你有多少钱?”
TMK一摸口袋,发现只有n个硬币,每个硬币的价值为a[i]。
然后店主继续说:“现在你用你的钱凑一些数,如果你的钱能凑成[0,x]里面所有的数,那么你将会免费获得该店价值x元的代金券,假设你有四个硬币面值分别为1,2,4,100,你就可以凑成[0,7]里面所有的数,我们将会送你7元的代金券。现在就用你的硬币来试试吧。Enjoy yourself!”
在TMK努力凑钱的时候,店主想知道他要送多少代金券给TMK。
Input
第一行一个整数T,表示数据组数。
对于每组数据,首先读入一个整数n(n<=100000),然后接下来的一行有n个整数,表示a[i] (0<a[i]<=1e9)
Output
对于每个数据,输出一个整数x,表示店主要送x元的代金券给TMK
Sample Input
131 2 3
Sample Output
6
思路:先排下序,遍历下数组,当处理到a[i]时,如果前面i-1个数所得到的区间是1~x,那么加上a[i]可得到1+a[i]~x+a[i],于是判断1+a[i]跟x差值是否大于2,是就在这里break了,不是就继续扫下去,同时覆盖范围更新为1~x+a[i]。# include <bits/stdc++.h># define MAXN 100000using namespace std;long long a[MAXN+1];int main(){ int t, n; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0; i<n; ++i) scanf("%lld",&a[i]); sort(a, a+n); if(a[0] != 1) { puts("0"); continue; } long long l=1, r=1; for(int i=1; i<n; ++i) { if(l+a[i]-r > 2) break; r += a[i]; } printf("%lld\n",r); } return 0;}
0 0
- GDUT2017校赛:Problem H: tmk买礼物(思维)
- 2017广东工业大学 校赛H题tmk买礼物
- zzuli 2126 tmk买礼物 思维题
- 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物
- zzuli 2126: tmk买礼物(模拟)
- tmk买礼物
- 2017 年广工大的程序设计决赛H题 --- tmk买礼物
- 广工ProblemH 1231 TMK买礼物(判定数组)
- GDUT2017校赛:Problem A: 两只老虎(数学)
- GDUT2017校赛:Problem C: 爬楼梯(DP)
- 洛谷 P1194 买礼物
- 洛谷P1194 买礼物
- 洛谷P1194 买礼物
- ZSTU校赛Problem D: 买iphone(背包)
- 2016Y GDUT新生杯初赛 Problem I: 神枪手TMK
- 2016广东工业大学新生杯决赛:Problem F: 神偷TMK
- GDUT2017秋季训练(七)-Color (数学容斥)
- 9.9 买礼物的艰辛 2719
- WebStorm使用教程
- 计算1024的阶乘结果有多少个0
- Three.js进阶篇之2
- 关于价值
- #pragma的用法
- GDUT2017校赛:Problem H: tmk买礼物(思维)
- Qt5:用宏定义区分不同系统下的代码实现
- Java的clone方法
- Netty学习(四)-TCP粘包和拆包
- 集合框架(一)-关于ArrayList的源码几点比较重要的总结
- Windows下80端口被进程System占用的解决方法
- 模板方法模式的基本使用
- 第二天
- Oracle 数据库提示“ora-28002:7天之后 口令将过期”的解决办法