2017广东工业大学程序设计竞赛决赛 网络赛
2017-03-27 22:43
246 查看
网实在太卡了...
来,我们先来放松下,听听儿歌,一起“唱”。
两只老虎两只老虎,跑得快跑得快。
一只没有耳朵,一只没有尾巴。
真奇怪,真奇怪。
Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的。
现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的。
其中只有三种老虎:
第一种(正常的):有2个耳朵、1条尾巴、4条腿
第二种(没耳朵):有0个耳朵、1条尾巴、4条腿
第三种(没尾巴):有2个耳朵、0条尾巴、4条腿
第一行一个整数T表示有多少组样例。
接下来每一行一个样例:
包含三个整数a,b,c表示总共有a个耳朵,b条尾巴,c(<=4000)条腿,数据保证有解。
对于每组样例输出一行,表示有多少只正常的老虎。
112 7 40
3
“只有通过毁灭才能揭示真理。” —— 虚空之眼
维克兹是一个有触手的虚空来客,他带着非凡的意图探索着符文之地:吸收掉所有知识。凭借着他不断地注视,维克兹可以发射瓦解光线来灭除并分析他途中的一切东西,并为他供给数量庞大的信息。没人知道他为什么需要如此多的材料,尽管有人推测他设法了解符文之地,是为了加速它的毁灭。
另外,维克兹本身也是一个极其强大的魔法师,他的技能会对命中的敌人施加有机体解构效果。如果累积到3层效果,敌人就会受到爆发性的真实伤害。
现在,维克兹正准备施展他的绝招 —— 生命形态瓦解射线,来对付被永久眩晕且没有携带任何魔抗装备的约德尔人。另外,他的绝招每10秒就可以对敌人累积一层有机体解构效果。
维克兹希望找到能够跟他一起遨游大陆的伙伴,所以他准备考考你,如果已知生命形态瓦解射线持续的时间和每一秒的伤害,以及有机体解构效果每累积到3层所爆发的伤害(伤害爆发后层数归零),你是否能算出约德尔人受到的总伤害是多少呢?
请注意,如果你回答不出来,维克兹绝对很乐意将你一起分解掉。
输入包括T组数据,每组数据包括生命形态瓦解射线的持续时间A,每一秒的伤害B,以及有机体解构效果每累积到3层所爆发的伤害C。
(T <= 10000, 0 <= A, B, C <= 10000, 所有数据皆为整数)
输出一个数代表约德尔人受到的总伤害。
210 10 1030 10 10
100310
小时候,我只能一阶一阶得爬楼梯,
后来,我除了能一次爬一阶,还可以一次爬两阶,
到现在,我最多一次可以爬三阶。
那么现在问题来了,我想爬上n层楼,相邻楼层之间有一段楼梯,虽然我一次可以爬1个台阶、2个台阶和3个台阶,但是我在i与i+1层之间的楼梯上时,我不能跨越到i+1与i+2层之间的楼梯。现在有个n层的楼,知道每一段楼梯的阶数,我想知道,如果我只会往上走,并且忽略其他不在楼梯上的其他移动,共有多少种方案可以到达第n层。
第一行一个整数T(0<T<=50)表示有多少组样例。
对于每一组样例:
第一行一个n(1<n<=50)表示有多少层楼。
接下来一行,包括n-1个整数xi(0<xi<=20),由下到上依次表示每段楼梯的长度。
对于每组数据,输出一行表示共有多少种方案。由于答案较大,所以输出答案请对10007取模。
22344 5 6
42184
一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)
显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。
现在CC想知道,最少需要买多少新瓶子才能达到目标呢?
第一行一个整数T,表示有T组数据。
接着T行,每行两个正整数, N,K(1<=N<=10^9,K<=1000)。
一个非负整数,表示最少需要买多少新瓶子。
33 113 21000000 5
1315808
今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下。
TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店第2147483647位顾客,本店在搞一个活动,对本店第2147483647位顾客进行赠送活动。你先看看你有多少钱?”
TMK一摸口袋,发现只有n个硬币,每个硬币的价值为a[i]。
然后店主继续说:“现在你用你的钱凑一些数,如果你的钱能凑成[0,x]里面所有的数,那么你将会免费获得该店价值x元的代金券,假设你有四个硬币面值分别为1,2,4,100,你就可以凑成[0,7]里面所有的数,我们将会送你7元的代金券。现在就用你的硬币来试试吧。Enjoy
yourself!”
在TMK努力凑钱的时候,店主想知道他要送多少代金券给TMK。
第一行一个整数T,表示数据组数。
对于每组数据,首先读入一个整数n(n<=100000),然后接下来的一行有n个整数,表示a[i] (0<a[i]<=1e9)
对于每个数据,输出一个整数x,表示店主要送x元的代金券给TMK
131 2 3
6
Problem A: 两只老虎
Description
来,我们先来放松下,听听儿歌,一起“唱”。两只老虎两只老虎,跑得快跑得快。
一只没有耳朵,一只没有尾巴。
真奇怪,真奇怪。
Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的。
现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的。
其中只有三种老虎:
第一种(正常的):有2个耳朵、1条尾巴、4条腿
第二种(没耳朵):有0个耳朵、1条尾巴、4条腿
第三种(没尾巴):有2个耳朵、0条尾巴、4条腿
Input
第一行一个整数T表示有多少组样例。接下来每一行一个样例:
包含三个整数a,b,c表示总共有a个耳朵,b条尾巴,c(<=4000)条腿,数据保证有解。
Output
对于每组样例输出一行,表示有多少只正常的老虎。
Sample Input
112 7 40
Sample Output
3#include<bits/stdc++.h> using namespace std; int main() { int a,b,c; int t; cin>>t; while(t--) { cin>>a>>b>>c; int x=(2*a+4*b-c)/4; cout<<x<<endl; } return 0; }
Problem D: 只有通过毁灭才能揭示真理
Description
“只有通过毁灭才能揭示真理。” —— 虚空之眼维克兹是一个有触手的虚空来客,他带着非凡的意图探索着符文之地:吸收掉所有知识。凭借着他不断地注视,维克兹可以发射瓦解光线来灭除并分析他途中的一切东西,并为他供给数量庞大的信息。没人知道他为什么需要如此多的材料,尽管有人推测他设法了解符文之地,是为了加速它的毁灭。
另外,维克兹本身也是一个极其强大的魔法师,他的技能会对命中的敌人施加有机体解构效果。如果累积到3层效果,敌人就会受到爆发性的真实伤害。
现在,维克兹正准备施展他的绝招 —— 生命形态瓦解射线,来对付被永久眩晕且没有携带任何魔抗装备的约德尔人。另外,他的绝招每10秒就可以对敌人累积一层有机体解构效果。
维克兹希望找到能够跟他一起遨游大陆的伙伴,所以他准备考考你,如果已知生命形态瓦解射线持续的时间和每一秒的伤害,以及有机体解构效果每累积到3层所爆发的伤害(伤害爆发后层数归零),你是否能算出约德尔人受到的总伤害是多少呢?
请注意,如果你回答不出来,维克兹绝对很乐意将你一起分解掉。
Input
输入包括T组数据,每组数据包括生命形态瓦解射线的持续时间A,每一秒的伤害B,以及有机体解构效果每累积到3层所爆发的伤害C。(T <= 10000, 0 <= A, B, C <= 10000, 所有数据皆为整数)
Output
输出一个数代表约德尔人受到的总伤害。
Sample Input
210 10 1030 10 10
Sample Output
100310#include<bits/stdc++.h> using namespace std; int main() { int t; int a,b,c,sum; cin>>t; while(t--) { cin>>a>>b>>c; int m=a/30; sum=a*b+c*m; cout<<sum<<endl; } return 0; }
Problem C: 爬楼梯
Description
小时候,我只能一阶一阶得爬楼梯,后来,我除了能一次爬一阶,还可以一次爬两阶,
到现在,我最多一次可以爬三阶。
那么现在问题来了,我想爬上n层楼,相邻楼层之间有一段楼梯,虽然我一次可以爬1个台阶、2个台阶和3个台阶,但是我在i与i+1层之间的楼梯上时,我不能跨越到i+1与i+2层之间的楼梯。现在有个n层的楼,知道每一段楼梯的阶数,我想知道,如果我只会往上走,并且忽略其他不在楼梯上的其他移动,共有多少种方案可以到达第n层。
Input
第一行一个整数T(0<T<=50)表示有多少组样例。对于每一组样例:
第一行一个n(1<n<=50)表示有多少层楼。
接下来一行,包括n-1个整数xi(0<xi<=20),由下到上依次表示每段楼梯的长度。
Output
对于每组数据,输出一行表示共有多少种方案。由于答案较大,所以输出答案请对10007取模。
Sample Input
22344 5 6
Sample Output
42184
HINT
#include<bits/stdc++.h> using namespace std; int main() { int t; int n,m; long long a[]={1,2,4,7,13,24,44,81,149,274,504,927,1705,3136,5768,10609,19513,35890,66012,121415}; cin>>t; while(t--) { cin>>n; long long sum=1; for(long long i=0;i<n-1;i++) { cin>>m; sum=(sum*a[m-1])%10007; } sum=sum%10007; cout<<sum<<endl; } return 0; }另一种方法
#include<bits/stdc++.h> #define MOD 10007 using namespace std; int a[70],dp[70]; int main() { int t; dp[1]=1; dp[2]=2; dp[3]=4; for(int i=4;i<=20;i++) dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%MOD; cin>>t; while(t--) { int n,sum=1; cin>>n; for(int i=0;i<n-1;i++) { scanf("%d",&a[i]); sum=(sum*dp[a[i]])%MOD; } cout<<sum<<endl; } return 0; }
Problem E: 倒水(Water)
Description
一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。
现在CC想知道,最少需要买多少新瓶子才能达到目标呢?
Input
第一行一个整数T,表示有T组数据。接着T行,每行两个正整数, N,K(1<=N<=10^9,K<=1000)。
Output
一个非负整数,表示最少需要买多少新瓶子。
Sample Input
33 113 21000000 5
Sample Output
1315808#include <iostream> using namespace std; int cal(int n) { int ans = 0; while(n) { ans ++; n &= n-1; } return ans; } int lowbit(int n) { return n&-n; } int main() { int T; scanf("%d",&T); while(T--) { int n, k; scanf("%d%d", &n, &k); int ans = 0; while(cal(n) > k) { ans += lowbit(n); n += lowbit(n); } printf("%d\n", ans); } return 0; }
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#include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 1e5 + 5; int a[maxn]; int main() { int T; scanf("%d", &T); while(T--) { int n; scanf("%d", &n); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); sort(a, a + n); ll ans = 0; for(int i = 0; i < n && ans + 1 >= a[i]; ++i) ans += a[i]; printf("%lld\n", ans); } return 0; }
相关文章推荐
- 2017广东工业大学程序设计竞赛决赛 G 等凹数字
- 2017广东工业大学程序设计竞赛决赛 Problem B: 占点游戏(博弈)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem H: tmk买礼物(数论)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water) (详解)
- 2017广东工业大学程序设计竞赛决赛-等凹数字
- 2017广东工业大学程序设计竞赛决赛:G. 等凹数字(数位DP)
- 2017广东工业大学程序设计竞赛决赛 Problem B: 占点游戏(博弈)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem H: tmk买礼物(数论)
- 2017广东工业大学程序设计竞赛决赛-E(倒水)
- 2017广东工业大学程序设计竞赛决赛 C题 爬楼梯(简单递推)
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
- 2017广东工业大学程序设计竞赛决赛 tmk买礼物
- 2017广东工业大学程序设计竞赛决赛 Problem B: 占点游戏(博弈)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem H: tmk买礼物(数论)
- 2017广东工业大学程序设计竞赛决赛(官方题解)
- 2017广东工业大学程序设计竞赛决赛(重现)-爬楼梯
- 2017广东工业大学程序设计竞赛决赛 Problem B: 占点游戏(博弈)