题目链接

Problem A: 贪吃的zhazhahe

Description

Zhazhahe很喜欢吃烧饼,但是要做好一块烧饼,要把两面都弄热,如果一次只能弄一个,zhazhahe一定会等得不耐烦,幸好现在有一个大的平底锅,一次可以同时放入k个烧饼,一分钟只能做好一面。而现在有n个烧饼,至少需要多少分钟才能全部做好呢?

Input

输入数据组数为T(T<=100),每组数据输入n和k,中间以空格隔开,其中1<=k,n<=1,000,000,000;

Output

对于每个测试样例,输出全部做好所需的最少分钟数。

Sample Input

2
1 1
3 2

Sample Output

2
3

HINT

/*分析:首先我们知道n个饼总的需要烤的面数是2*n,每次我们最多可以烤k面,所以烤的最小次数是2*n/k(整除时),或者2*n/k+1(不整除时,余数部分需要整体烤一次)
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{int t;cin>>t;while(t--){int n,k;scanf("%d%d",&n,&k);if(n<=k){printf("%d\n",2);continue;}if(2*n%k!=0) printf("%d\n",2*n/k+1);else printf("%d\n",2*n/k);}return 0;
}
/**************************************************************Problem: 1196User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem B: 签到题

Description

某一天,北原春希、小木曾雪菜和冬马和纱分享幸福度。他们希望三人能平等获得这份幸福,否则他们就会各奔东西。于是叫你来判断他们能否三个人快乐的玩耍下去。

Input

输入数据为T组(T <= 100),每组数据读入一个幸福度n。(1<=n的位数<=500)

Output

对于每个测试实例,如果三人能平等获得幸福,则输出“Three people are the most stable”,否则输出“Why would it be like this”。双引号不用输出。

Sample Input

3
111111111
333333333333333333333333333333333333333333333
11111111111111111111111111111111111111111111

Sample Output

Three people are the most stable
Three people are the most stable
Why would it be like this

HINT

/*分析:把每一位加起来判断是否能够整除3即可。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
char s[maxn];
int main()
{int t;cin>>t;while(t--){scanf("%s",s);int len=strlen(s);int sum=0;for(int i=0;i<len;i++){sum+=s[i]-'0';}if(sum%3)puts("Why would it be like this");else puts("Three people are the most stable");}return 0;
}/**************************************************************Problem: 1197User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem C: 算罚时

Description

某次ACM比赛中你一次AC了全部8道题目,给出你AC每道题的时间,算出自己的罚时。

Input

输入数据为T组(T <= 100),每组数据读入8个时间,时间格式是HH:MM。每道题目的罚时为AC所用的分钟数。

Output

每组输出8道题的罚时之和。

Sample Input

3
00:00
00:00
00:00
00:00
00:00
00:00
00:00
00:00
05:00
05:00
05:00
05:00
05:00
05:00
05:00
05:00
00:30
01:00
01:30
02:00
02:30
03:00
03:30
04:00

Sample Output

0
2400
1080
/*分析:按照题意写就行了
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
int main()
{int t;cin>>t;while(t--){int a,b,sum=0;for(int i=0;i<8;i++){scanf("%d:%d",&a,&b);sum+=a*60+b;}printf("%d\n",sum);}return 0;
}/**************************************************************Problem: 1198User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem D: 有趣的游戏

Description

有个小师妹找zhazhahe玩游戏。他们有一堆n个珠子,每人轮流拿走若干个,轮到谁的回合拿不了珠子就算输。给出一个n,每次能拿走的珠子数量在区间[l,r]内(如果剩余珠子不足就不能拿,判输),小师妹先开始拿。假设小师妹和zhazhahe都非常聪明,会采取最优策略,问谁会赢得游戏?

Input

有多组样例,第一行输入一个样例数T(0<T<=1000)

每个样例只有一行,三个正整数n,l,r (0<n<=1000) (0<l<=r<=1000)

Output

每个样例只有一行,如果小师妹赢了输出“Win”,输了就输出“Lose”。

Sample Input

3
4 1 4
7 2 6
10 3 6

Sample Output

Win
Win
Lose

HINT

/*类型:博弈分析:这种类型题的基本思路是找到一种恒定不变的方式,使得对方无论怎么拿,你都能找到对应要拿的数量举个例子,假如n=22,取的区间为[1,2],那么小师妹第一次拿走1个,使得剩下的数量21,是区间左右端点之和的倍数,即3的倍数.那么无论对方怎么拿,我们都能维持剩下来的数量是3的倍数的状态不变,比如他拿1个,你就拿2个,或者他拿2个,你就拿1个始终保持他能拿,我必能拿的状态,那么只要判断初始情况,我就知道我能不能稳赢回顾刚刚的拿法,我们很容易推出一个方式判断第一个人应该如何拿,即余数=n%(L+R)1.假设这个余数落在[L,R]里面,那么小师妹第一次把余数全抓走,剩下的是(L+R)的倍数,我们知道,小师妹稳赢2.假设这个余数为L-k (0<k<=L)里面,那么因为只能抓[L,R]个珠子,小师妹动不了余数这个数目,她只能先动(L+R)里面合法的某些数目,那么第二个人能对应着拿掉小师妹在(L+R)里面剩下的数目,情况变成小师妹稳输3.假设这个余数落在R+L-k (0<k<L)里面,那么小师妹第一次拿走R个,剩下的数目为L-k即把第二种状态丢给对方,小师妹稳赢所以题目可以解决.
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 505;
int main()
{int t;cin>>t;while(t--){int n,l,r;scanf("%d%d%d",&n,&l,&r);if(n%(l+r)<l)puts("Lose");else puts("Win");}return 0;
}/**************************************************************Problem: 1199User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem E: 套套套

Description

矩形A能与矩形B不接触的放在矩形B里就称为矩形A能嵌套进矩形B。

给你n个矩形,编写程序,判断它们能否互不接触嵌套n层。

如:有2 * 2 , 4*5,3*4 三个矩形。

方案一嵌套非法,但是方案二合法(嵌套顺序任意),所以2*2,3*4,4*5满足条件

Input

第一行一个整数t(t < 15 ),表示有t组数据。 每组数据第一行一个整数n(n < 10000),矩形的个数,接下去的n行,每行两个正整数x和y(由空格分开),第i行表示第i个矩形的长为x和宽为y。(0 < y <= x < 100000 )

Output

每组数据输出一行,矩形能完成嵌套则输出“Yes”,否则输出“No”。(不包含双引号)

Sample Input

2
3
2 2
4 3
5 4
2
2 1
3 1

Sample Output

Yes
No

HINT

/*分析:因为题目限制了n个矩形要达到n层嵌套,所以对于n个矩形能否满足条件,我们只需要先对所有矩形的面积从小到大排序,再判断相邻两个矩形能否嵌入即可
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
struct rt{ll x,y,s;
};
rt a[maxn];
bool cmp(const rt&a,const rt&b){return a.s<b.s;
}
int main()
{int t;cin>>t;while(t--){int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);a[i].s=a[i].x*a[i].y;}sort(a,a+n,cmp);int flag=1;for(int i=1;i<n;i++){if((a[i].x>a[i-1].x&&a[i].y>a[i-1].y)||(a[i].x>a[i-1].y&&a[i].y>a[i-1].x))continue;else{flag=0;break;}}if(flag)puts("Yes");else puts("No");}return 0;
}/**************************************************************Problem: 1200User: MDZZhhhLanguage: C++Result: AcceptedTime:8 msMemory:1940 kb
****************************************************************/

Problem F: 吃豆豆

Description

在二进制下,十进制下的10写成1010,12可以写成1100。这个时候贪吃的Shadow把一些十进制下的数看成了二进制,并且把二进制中每一个1都看成了一颗豆豆,Shadow把这些十进制下的数字叫做豆数,Shadow想知道,他在每一个豆数中可以吃到多少颗豆豆。

Input

多组数据,对于每一组数据,有一个整数 n,代表豆数的值。最后以 -1结束输入。其中 0 <= n <= 1e18.

Output

对于每组数据输出一个整数,代表可以吃到的豆子数。

Sample Input

1012
-1

Sample Output

22

HINT

/*分析:判断一个数的二进制里面有几个1,不断对2取模和除2,看有几个满足即可
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
int main()
{//int t;cin>>t;ll n;while(~scanf("%lld",&n)&&n!=-1){int sum=0;while(n){sum+=n%2;n/=2;}printf("%d\n",sum);}return 0;
}/**************************************************************Problem: 1201User: MDZZhhhLanguage: C++Result: AcceptedTime:8 msMemory:1696 kb
****************************************************************/

Problem G: Pigofzhou和他的那么多个学妹

Description

男神pigofzhou在开学还没多久就基本上与16级几乎所有的师妹打成了一片,不过由于男生pigofzhou认识的师妹太多了,但是又怕忘了,于是就拿个本子记录下来,有一天他忽然想看一下这本本子有多少面,但是毕竟是pigofzhou怎么可能直接去数本子有多少面呢,于是对于每一页的页码都用键盘敲到电脑上,然后数自己敲了几次键盘,从而计算出本子有多少面,可以吧,这很pigofzhou,例如页码为1~9页,每页敲一下键盘,页码为10~99页,每页敲2下键盘,页码为100~999页,每页敲三下,以此类推。

Input

输入一个正整数t(0<t<3000)表示样例组数,每组样例输入一个正整数n(0<n<1e12),表示敲了n下键盘。

Output

输出一个正整数表示这本本子有多少面

Sample Input

5
9
11
15
23
39

Sample Output

9
10
12
16
24

HINT

虽然广工没那么多女生,但是数据并不小

/*分析:先预处理出第9、99、999、9999...页敲击键盘的次数,得到边界值,然后每次用边界值查找到n属于那个区域,再用n减去下界的次数得到从该区域第一个页数到当前页数的总敲击次数再用敲击次数求出该页数是在当前区域的第几个,再-1+10^数字的位数,就是答案
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 10000+5;
ll a[15],p[15];//a储存边界值,p[i]表示10^(i-1)
int main()
{a[1]=9;p[1]=1;for(ll i=2,t=10;i<=13;i++,t*=10){a[i]=i*9*t+a[i-1];p[i]=t;}int t;cin>>t;while(t--){ll n;scanf("%lld",&n);for(int i=1;i<=13;i++){if(a[i]>n){printf("%lld\n",(n-a[i-1])/i-1+p[i]);break;}}}return 0;
}/**************************************************************Problem: 1202User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem H: 神奇的清华大大的神奇魔法

Description

清华大大很喜欢字符串,因为在他眼中,字符串有关的题目都可以轻松解决。 但是清华大大不喜欢不是回文串的字符串,因为如果一个字符串是回文串,意味着清华大大只读一半的字符串就可以了。 回文串是前后读结果相同的字符串,例如"p”, "abba"是回文串,而“ac”,“yt”则不是。 如果遇到非回文串字符,神奇的清华大大就会施展神奇的魔法,每次他可以消耗1个魔法值将该字符串中的一个字母变成另一个字母,或者消耗0个魔法值改变该字符串中各个字母的顺序。 现在有一个字符串(只含小写字母),请你告诉清华大大该如何做才能施展尽可能少的魔法值使它变成回文串。

Input

第一行为T,有T个样例。小于50。 接下来每行含有一个字符串,每个字符串长度小于200000。

Output

每行输出消耗最少魔法值所产生的回文字符串, 如果有多个结果,输出字典序最小的结果

Sample Input

2
aabc
aabcd

Sample Output

abba
abcba

HINT

/*类型:贪心+模拟分析:先记录26个字母的出现次数num[],若num[i]为奇数,且只有一个字母,那么可以直接输出若存在多个num[i]为奇数这时分两种情况:1.需要把其它字母改为当前字母;2.把该字母改为其它字母。为了得到最小字典序,我们贪心的选择将字典序大的字母改为字典序小的字母,按照这样的思维模拟下去。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 200000+5;
char s[maxn];
int a[30],n;void print(){int flag=-1;for(int i=0;i<26;i++){if(a[i]%2)flag=i;}if(flag==-1){for(int i=0;i<26;i++){int len=a[i]/2;for(int j=0;j<len;j++){printf("%c",i+'a');}a[i]-=len;}for(int i=25;i>=0;i--){for(int j=0;j<a[i];j++){printf("%c",i+'a');}}puts("");}else{int cnt=0;for(int i=0;i<26;i++){int len=a[i]/2;for(int j=0;j<len;j++){printf("%c",i+'a');cnt++;if(cnt==n/2){printf("%c",flag+'a');a[flag]--;}}a[i]-=len;}for(int i=25;i>=0;i--){for(int j=0;j<a[i];j++){printf("%c",i+'a');}}puts("");}}
int main()
{int t;cin>>t;while(t--){memset(a,0,sizeof(a));scanf("%s",s);int len=strlen(s);n=len;for(int i=0;i<len;i++){a[s[i]-'a']++;}int flag=0;for(int i=0;i<26;i++){flag+=a[i]%2;}if(flag<=1)print();else{int k=26;while(k--){//flag=0;int r=-1,l=-1;for(int i=25;i>=0;i--){if(a[i]%2){if(r==-1){r=i;break;}}}for(int i=0;i<25;i++){if(a[i]%2&&l==-1){l=i;break;}}if(l!=r){a[r]--;a[l]++;}}print();}}return 0;
}/**************************************************************Problem: 1203User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1896 kb
****************************************************************/

Problem I: 神枪手TMK

Description

TMK十分喜欢打CS,据说GDUTACM新生杯的一等奖的奖品的星际CS的真人CS游戏团体券,他毅然报了名。 在新生杯的初赛上,TMK被一道题卡住了,然后TMK居然。。。。。睡着了,他梦做了一个很长的梦,他梦见了自己进入了宇宙空间,忽然一班外星人向TMK袭来,TMK在用聪明的头脑打败了一个外星人后,成功的夺得了外星人的一把枪,TMK是个神枪手,他每次开枪都能把两个外星人干掉。 新生杯结束后,yfq摇醒了TMK,TMK虽然醒了,但他还在回味之前的梦,他想知道自己干掉了多少个外星人,但他记不清了,他只记得自己开了多少次枪。TMK很不开心,于是yfq想帮帮他算一下他干掉了多少外星人。

Input

题目包含多组数据 对于每一组数据,输入有一个数字n(-10000<=n<=10000),表示tmk一共开了多少次枪。

Output

对于每组数据,输出一行,如果不能可能有这种情况,那么肯定是tmk记错了,输出”impossble”(不带引号),否则输出有一个数字x,表示tmk一共干掉了多少外星人

Sample Input

3260-1

Sample Output

75131impossble

HINT

/*分析:直接写把
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 200000+5;int main()
{//int t;cin>>t;int n;while(~scanf("%d",&n)){if(n<0)puts("impossble");else printf("%d\n",2*n+1);}return 0;
}/**************************************************************Problem: 1204User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:1696 kb
****************************************************************/

Problem J: 神龙的烦恼

Description

冰法师zz因为苦修寒冰魔法而耽误了找女朋友的大事,于是他集齐了7颗龙珠,召唤出了神龙。 神龙:说出你的愿望吧。 zz:我想要一个漂亮又闻名世界,会各种姿势而且绝不会跟我闹别扭的妹子做我女朋友。 神龙:这好办。 于是乎,一个芭蕾娃娃人偶从天而降,神龙消失在天际。 最近太多宅男向神龙许愿要女朋友了,这要让神龙准备多少个芭比娃娃啊。神龙累了,于是他找到了你,希望你帮忙算一它购置m个芭比娃娃的费用。现有n个供货商,第i(1<=i<=n)个供货存芭比娃娃量amount[i],单价cost[i]。由于向神龙许愿要钱的人也很多,所以神龙希望花费金额数最少,请你告诉它最少需要用多少钱买芭比娃娃。 若供货商无法提供出m个芭比娃娃,则输出-1。

Input

第一行有两个整数n,m(1<=n<=10^6,m<=10^8),分别代表供货商数量和神龙要买的芭比娃娃数量。 第二行到第n+1行均有两个整数amount[i],cost[i](1<=amount[i],cost[i]<=10^6)分别代表第i个供货商所存芭比娃娃数量和芭比娃娃的单价.

Output

仅有一个整数ans,代表神龙最少花费金额,或者是-1,代表买不到m个芭比娃娃。

Sample Input

5 201 14 5010 64 205 8

Sample Output

181

HINT

/*分析:价格从小到大买就行了
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<list>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
struct babi{ll num,val;
};
babi a[maxn];
bool cmp(const babi&a,const babi&b){return a.val<b.val;
}
int main()
{int n,m;scanf("%d%d",&n,&m);ll sum=0;for(int i=0;i<n;i++){scanf("%d%d",&a[i].num,&a[i].val);sum+=a[i].num;}if(sum<m)puts("-1");else{sort(a,a+n,cmp);sum=0;for(int i=0;i<n;i++){if(a[i].num<m){sum+=a[i].val*a[i].num;m-=a[i].num;}else{sum+=a[i].val*m;break;}}printf("%lld\n",sum);}return 0;
}/**************************************************************Problem: 1205User: MDZZhhhLanguage: C++Result: AcceptedTime:0 msMemory:0 kb
****************************************************************/

GDUT2016年ACM新生杯初赛题解相关推荐

  1. 长大 ACM新生杯试题一(个人解法)

    长大 ACM新生杯试题一(个人解法): 来自我们可可爱爱的彩虹岛!!! 题目一: A 跷跷板 Description 自从彩虹岛新引进了一批设备,同学们的校园生活变得更加丰富了.彩虹岛流传着一句话:& ...

  2. ACM新生赛部分题解

    2021级的ACM新生赛已经完结了,我就自己做出来的八道题整理一下题解,因为其他是真的不会. 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 一.我们是冠军 7 日星期 777 的凌晨,7 ...

  3. [ACM] 第八届西邮杯初赛题解

    Problem A: 加法变乘法 Time Limit: 10 Sec Memory Limit: 256 MB Description 已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个 ...

  4. 2020湖南大学ACM新生杯题解- D Treasure Cave

    思路: 将地上的所有数和空中的数放在一起排序,空中的拿出意思就是可以最终从这个排好序的序列中抽出任意一个数,使得剩下的序列为严格的上升序列. 并且题目希望尽可能大,检查这个排好序的序列,如果这个序列中 ...

  5. 第三届ACM/ICPC新生赛初赛题解

    A //注意感叹号为中文字符 #include<stdio.h> int main(){printf("I am a ACMer !\n");return 0; } B ...

  6. 林湾村男子铁路技术职业学院2022年5月ACM校赛初赛题解

    传送门:SWJTUOJ A题 Bob每次最多走一格,最多走300步,而起始位置在0~300之间,所以最多也就走到600这样子,那么只需要记录最低600位就可以了. 每次乘的时候,时间复杂度为: 其中n ...

  7. 2018“西邮杯”初赛题解

    1.加法变乘法 已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个不相邻的加号变成乘号,使得结果为Y. 找出所有满足条件的可能答案并输出(把两个乘号左边的数字用小括号括起来,中间用英文逗号 ...

  8. 第五届B组传智杯初赛题解

    第一题: 题目背景: 在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了. 对于一名理科生来说,各种软件在学习和研究中是非常重要的.为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编 ...

  9. 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解源码

    Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...

  10. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参 ...

最新文章

  1. iOS--资源--优秀app发掘
  2. python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
  3. centos6 kvm网卡桥接
  4. get与post请求问题
  5. 详细介绍如何在win7下首次实现通过Git bash向Github提交项目
  6. 获取日志$6到$NF的字段
  7. Web安全CSRF攻击与防御
  8. 新手指导:51CTO微博小技巧
  9. 从全栈式解决方案到情感化,揭秘问众智能切入车载语音市场的最佳姿势...
  10. 笔试算法题(26):顺时针打印矩阵 求数组中数对差的最大值
  11. LeetCode 542. 01 矩阵
  12. Like rlike在hive中的区别
  13. csdn 博客添加目录方法
  14. 防抖与节流方案_手写系列之防抖和节流
  15. linux界面安装mysql_linux安装mysql可视化界面
  16. 触摸屏驱动学习并移植
  17. 如何破解 App 网络代理后出现网络不可用的情况
  18. Qt环境下调用捷宇高拍仪OCX
  19. centos刻录工具_centos u盘引导制作工具
  20. 一起用Python做个自动化弹钢琴脚本,我竟然弹出了《天空之城》!

热门文章

  1. Matplotlib 绘制条形图
  2. python编程自然数表达式_结对编程-python实现
  3. 周末闲暇用javascript写个网页“斗兽棋”小游戏
  4. 随机游走(Random Walk)算法
  5. firefox autoproxy 实现ssh代理上网,针对XP,新版可以用firefox的foxproxy组件
  6. ARM内核矩阵计算教程(STM32)
  7. android红外接收api,关于安卓红外API:ConsumerIrManager类
  8. C++输出流cout的执行顺序问题
  9. python 微信投票脚本_Python自动化刷投票脚本开发,微信投票再也不需要发红包了...
  10. 1553B总线通信协议