A:
【2017哈尔滨理工大学新生赛】仔细读题ORZ
A.涂山红十字会 | |||||
|
|||||
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.算法竞赛入门经典 | |||||
|
|||||
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.貂蝉的试炼 | |||||
|
|||||
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.时空之门 | |||||
|
|||||
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.真假小妖 | |||||
|
|||||
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.小妖的下属 | |||||
|
|||||
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.丢失的数字 | |||||
|
|||||
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.电话拦截 | |||||
|
|||||
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