2017哈尔滨理工大学新生赛

A:
【2017哈尔滨理工大学新生赛】仔细读题ORZ

A.涂山红十字会
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 1121(338 users) Total Accepted: 246(234 users) Special Judge: No
Description
涂山小超最近总觉得身体不舒服,比如玩久了手机会头晕,吃多了会觉得撑,喝多了凉水会觉得塞牙,于是他决定去涂山红十字会做一个全面的身体检查。为了诊断结果的准确,他打算去看n个医生,每个医生的诊断都需要前面所有医生的诊断,所以小超必须按照顺序去看医生,即按照doctor 1,doctor 2,doctor 3…doctor n的顺序。小超可以从最后一个医生那里得到检查的最后结果。
涂山红十字会的医生工作时间有一点奇怪,doctor i在第si天开始工作,工作时间间隔di天。即,doctor i在第si,si+di,si+2*di,… 天是工作时间。
医生检查需要很长的时间,所以小超一天最多只能看一个医生。现在,他想知道他最少需要多少天能看完所有的医生,你能告诉他吗?
Input
输入数据有多组,每组数据第一行输入一个整数n(1?≤ n ≤?1000),表示小超需看医生的数量。接下来n行输入,每行两个整数si,di (1?≤ si, di ≤?1000),含义如题。
Output
对于每组输入数据,输出一个整数表示小超看完所有医生需要的最少天数,每组输出占一行。
Sample Input
3
2 2
1 2
2 2
2
10 1
6 5
Sample Output
4
11

代码:

#include #include #include #include #include using namespace std; int main() { int i,n; while(~scanf("%d",&n)) { int ans=0,op,time; for(i=0; i=op) { op+=time; } ans=op; } printf("%d\n",ans); } return 0; }


B:

B.算法竞赛入门经典
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 1333(447 users) Total Accepted: 384(361 users) Special Judge: No
Description
小八刚进大学就参加了学校的ACM集训队,好开心呀~ 刚刚接触编程的小八找到一本编程界的武林秘籍 —— 《算法竞赛入门经典》(刘汝佳),好想快点看完呀。可是除了编程还有好多事情呢,每天都要上课,还要跑早操,还想睡懒觉……
计划能动性很强的小八很快把自己接下来n天的working-time列出来了,表示自己每天的工作秒数,剩下的时间就可以学习武林秘籍,并且假定自己学完需要t秒,已知小八从第一天开始阅读,空闲时间全部用来阅读,你能告诉她,小八从开始阅读到读完共需要多少天吗?
Input
输入数据有多组,每组数据第一行输入两个整数n和t,(1 ≤ n ≤ 100, 1 ≤ t ≤ 106),分别表示天数和读完武林秘籍需要的秒数。第二行输入n个整数 ai (0 ≤ ai ≤ 86400),表示小八n天里的working-time。
Output
对于每组输入数据,输出小八读完武林秘籍需要的天数,如果小八不能在n天之内看完,输出0。每组输出占一行。
Sample Input
2 2
86400 86398
2 86400
0 86400
Sample Output
2
1

代码:

#include #include #include #include #include using namespace std; int main() { int n,time,i; while(~scanf("%d%d",&n,&time)) { int t=0,www,day=0,ans,flag=0; for(i=0; i=time&&flag==0) { ans=day; flag=1; } } if(t>=time)printf("%d\n",ans); else printf("0\n"); } return 0; }


D:

D.貂蝉的试炼
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 367(189 users) Total Accepted: 183(167 users) Special Judge: No
Description
公元2017年11月19日,涂山小八正在专注的和小伙伴五黑,突然一道白光,回过神来,小八已经站在一个陌生的地方,红爸爸、蓝爸爸、暴君、主宰…随着耳边响起“欢迎来到王者农药”,对面走来熟悉的貂蝉小姐姐,小八恍然明白自己是站在王者农药的战场上。
貂蝉:“我知道你在疑惑什么,现在你可以选择接受或不接受我的试炼,如果你接受并通过了,我可以回答你的所有疑问,并且送你回去。相反,你将继续留在这等待。”
小八:“……接受(ノ`Д)ノ另外,你是在cosplay吗?”
貂蝉:“不是(ノ`Д)ノ,这是一场关于力量和智慧的考验。决斗开始时,我将向你抛出n块魔法水晶。魔法水晶具有跟踪作用,除非你破解上面的魔法,否则一定会被攻击。如何破解?每块魔法水晶上有个神秘攻击值,是古代花丸幼稚王国消失已久的罗马数字,只要你快速转换成阿拉伯数字并大声喊三遍,水晶球就会失效。”
貂蝉:“我看你骨骼清奇,是开黑界的奇才,那就给你几点提示吧。
1. 罗马数字基本字符: I、V、X、L、C、D、M,分别表述阿拉伯数字1、5、10、50、100、500、1000。
2.重复数次:一个罗马数字重复几次,就表示这个数的几倍。
3.右加左减:
(1)在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
(2)在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
(3)左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV。但是,左减时不可跨越一个位值。比如,99不可以用IC(100-1)表示,而是用XCIX([100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。)
(4)左减数字必须为一位,比如8写成VIII,而非IIX。
(5)右加数字不可连续超过三位,比如14写成XIV,而非XIIII。
4.数码限制:同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL。
以上为阿拉伯数字转罗马数字的规则,而你需要破解对应罗马数字的阿拉伯数字是多少。”
小八:“不懂。”
貂蝉:“看样例(ノ`Д)ノ”
作为小八队友的你,快点帮他回到现实世界,然后愉快的开黑吧。
Input
输入数据有多组,每组数据输入一个罗马数字n,(1≤n≤3999)。
Output
对于每组输入数据,输出罗马数字对应的阿拉伯数字,每组输出占一行。
Sample Input
VIII
XIX
XXXIX
XXI
XLI
Sample Output
8
19
39
21
41

代码:

#include #include #include #include #include using namespace std; char s[100]; int main() { while(~scanf("%s",s)) { int i,len=strlen(s),ans=0; for(i=0; i


E:

E.时空之门
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 1451(435 users) Total Accepted: 368(355 users) Special Judge: No
Description
话说上回涂山小八在队友的帮助下成功通过“貂蝉的试炼”,于是就可以回去了。貂蝉小姐姐一挥手带她来到一扇门前。
貂蝉:“此门名为时空之门,穿过此门就可以回去。只是要想开启此门需要密钥,密钥可从门上刻的那些密文之中得到。如何得到?寻找每行字符串之中有多少个if,全部找出之后即可开启此门。”
小八:“……”
Input
输入数据有多组,每组数据输入一行字符串(包含空格),输入持续到文件结束,每行数据长度不长于1000个字符,输入字符区分大小写。
Output
对于每组输入数据,输出所包含的 if 数目并换行,每组输出占一行。
Sample Input
ififififififi
iififfif
Sample Output
6
3

代码:

#include #include #include #include #include using namespace std; char s[1005]; int main() { while(gets(s)) { int len=strlen(s),i,ans=0; for(i=0; i


G:

G.真假小妖
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 1236(482 users) Total Accepted: 425(387 users) Special Judge: No
Description
风和日丽的一天,涂山小八正在悠哉的晒着太阳。突然,一群小妖涌了进来,一问才知道又是东方平平捉弄她,使了个法术造了一群涂山小妖的盗版。现在分不清真小妖和假小妖了。
小八微微一笑,开始有条有理的组织起来鉴别真假。原来涂山小妖都有一个ID数字,这些ID数字都是特别的回文数字。平平不知道此事,造的假小妖的ID数字都不是回文数字。
看在小八都这么机智的份上,帮帮她吧?
Input
输入数据有多组,每组占一行,输入一个整数n(1≤n≤109),表示小妖的ID数字。
Output
对于每组数据,如果这个小妖是真小妖的话,输出“yes”,否则输出“no”(输出不包括引号),每组输出占一行。
Sample Input
12345
12321
2
Sample Output
no
yes
yes

代码:

#include #include #include #include #include using namespace std; char s[20]; int main() { while(~scanf("%s",&s)) { int i,flag=1,len=strlen(s); for(i=0; i


H:

H.小妖的下属
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 832(212 users) Total Accepted: 81(67 users) Special Judge: No
Description
话说上回涂山小八成功解出真假小妖的难题,东方平平觉得很不开心,仿佛受到了嘲笑。于是他又造了一批假的小妖,气鼓鼓的找到了小八。
平平:“哼,我造的这批小妖ID号也有特殊属性。简单来说,一个小妖所领导的小妖个数就是它的ID号可以分解的方式数,所谓分解,就是把n分解成若干个连续正整数之和。如ID=15的小妖,下属有3人,因为它有(1,2,3,4,5),(4,5,6),(7,8)共3种分解方式。现在我想问你,每个小妖的下属个数是多少,赌上我刚买的一打妖馨斋“一品五彩棒”棒棒糖。”
如果你能帮小八解出来的话,小八会把一品五彩棒分给你哦~
Input
输入数据有多组,每组输入一个整数n(1≤n≤109),表示小妖的ID数字。
Output
对于每组数据,输出这个小妖的下属个数,每组输出占一行。
Sample Input
3
15
2788
Sample Output
1
3
3

思路:
连续的整数,说明这个数减去最小的连续整数能够整除,如(15-1-2)%2==0,(15-1-2-3)%3==0,(15-1-2-3-4-5)%5==0。
代码:

#include #include #include #include #include using namespace std; int main() { int n,i; while(~scanf("%d",&n)) { int ans=0,k=1; for(i=2; i


I:

I.丢失的数字
Time Limit: 800 MS Memory Limit: 256000 K
Total Submit: 1541 (252 users) Total Accepted: 79 (71 users) Special Judge: No
Description
据说圣玛格丽特学院的图书馆上方住着一个金色妖精——维多利加,她有金色闪亮的头发和翡翠绿的双瞳,是个娇小宛如陶瓷娃娃般美丽容颜的少女。
“以智者知名,为愚者代言。”拥有智慧之泉的维多利加可是无所不知的哦~这不,数字收藏家涂山小八哭着跑来找她,说好盆友东方平平想送给她一个数字,但是自己的数字放的太乱了。
“我想找出我现在没有的最小正整数,让平平送给我,你能帮我找吗?”
嘛~维多利加这么可爱,当然会帮你啦~
Input
输入数据有多组,每组数据第一行输入一个整数n(1≤n≤106),表示小八拥有的数字个数。第二行输入n个整数ai(-109≤ai≤109),表示小八拥有的数字。
Output
对于每组输入数据,输出小八想让平平送给他的数字,每组输出占一行。
Sample Input
3
1 2 0
4
3 4 -1 1
Sample Output
3
2
Hint
数据量较大,建议使用scanf和printf输入输出。

桶排
代码:

#include #include #include #include #include using namespace std; int v[1000005]; int main() { int n,i,k; while(~scanf("%d",&n)) { for(i=0; i0&&k<1000005)v[k]=1; } i=1; while(v[i++]); printf("%d\n",i-1); memset(v,0,sizeof(v)); } return 0; }


K:

K.电话拦截
Time Limit: 1000 MS Memory Limit: 256000 K
Total Submit: 236 (78 users) Total Accepted: 41 (36 users) Special Judge: No
Description
小八用了点手段得知对手公司要做一个欺诈电话拦截app,小八立刻通知公司开发组,火速开发一个优质的欺诈电话拦截app,抢先一步上线。
小组技术总监给了一个方案,需要你来实现一下,首先用户可以标记电话号,标记成快递、骚扰、欺诈等。用户每收到一个电话,立即上传号码,经查找数据库,输出当前号码被标记次数最多的类型,以及被标记次数。如果有多于一种类型被匹配为最多次数,按照欺诈、骚扰、快递的优先级输出。
你作为小组成员,负责后台逻辑开发,现采用快速开发方案,开发一个功能预览版本。测试组成员已拟定好一组测试数据。
Input
输入数据有多组,每组数据先输入n(1≤n≤105)表示接下来的数据行数。接下来输入n行,输入按照时间顺序进行,有下面两种格式。
A 1234,表示接到一个电话1234。
B 1234 k,表示标记电话 1234 为快递。此处k、s、q分别表示快递、骚扰、欺诈。电话号码不超过20位。
Output
对于每组输入数据,输入为A 1234格式时,根据历史标记数据,匹配相应规则后,输出一个结果:
k=n:表示匹配“此电话被标记为快递n次”。
s=n:表示匹配“此电话被标记为骚扰n次”。
q=n:表示匹配“此电话被标记为欺诈n次”。
N:表示目前未被标记过。
输入为B 1234 k/s/q格式时,输出Y,表示已记录。
每组输出占一行。
Sample Input
7
A 1234
B 1234 k
A 1234
B 1234 k
B 1234 s
B 1234 s
A 1234
Sample Output
N
Y
k=1
Y
Y
Y
s=2

代码:

#include #include #include #include #include using namespace std; char s[100005][30],zhan[30]; int v[100005][3]; int main() { int n,i; while(~scanf("%d",&n)) { char fir; int www=0,i; getchar(); while(n--) { scanf("%c",&fir); if(fir=='A') { scanf("%s",zhan); for(i=0; i=v[i][1]&&v[i][0]>=v[i][2])printf("q=%d\n",v[i][0]); if(v[i][1]>v[i][0]&&v[i][1]>=v[i][2])printf("s=%d\n",v[i][1]); if(v[i][2]>v[i][0]&&v[i][2]>v[i][1])printf("k=%d\n",v[i][2]); break; } } if(i==www)printf("N\n"); getchar(); } else { scanf("%s %c",zhan,&fir); for(i=0; i



    推荐阅读