2017哈尔滨理工大学新生赛

A:

仔细读题ORZ

A.涂山红十字会
Time Limit: 1000 MSMemory 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在第sisi+disi+2*di… 天是工作时间。

医生检查需要很长的时间,所以小超一天最多只能看一个医生。现在,他想知道他最少需要多少天能看完所有的医生,你能告诉他吗?

Input

输入数据有多组,每组数据第一行输入一个整数n1 ≤ n ≤ 1000),表示小超需看医生的数量。接下来n行输入,每行两个整数sidi (1 ≤ sidi ≤ 1000),含义如题。

Output

对于每组输入数据,输出一个整数表示小超看完所有医生需要的最少天数,每组输出占一行。

Sample Input

3

2 2

1 2

2 2

2

10 1

6 5
Sample Output

4

11

代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

int main()
{
    int i,n;
    while(~scanf("%d",&n))
    {
        int ans=0,op,time;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&op,&time);
            while(ans>=op)
            {
                op+=time;
            }
            ans=op;
        }
        printf("%d\n",ans);
    }
    return 0;
}

B:

B.算法竞赛入门经典
Time Limit: 1000 MSMemory 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<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
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<n;i++)
        {
            day++;
            scanf("%d",&www);
            t=t+86400-www;
            if(t>=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 MSMemory Limit: 256000 K
Total Submit: 367 (189 users)Total Accepted: 183 (167 users)Special Judge: No
Description

  公元20171119日,涂山小八正在专注的和小伙伴五黑,突然一道白光,回过神来,小八已经站在一个陌生的地方,红爸爸、蓝爸爸、暴君、主宰随着耳边响起“欢迎来到王者农药”,对面走来熟悉的貂蝉小姐姐,小八恍然明白自己是站在王者农药的战场上。

     貂蝉:“我知道你在疑惑什么,现在你可以选择接受或不接受我的试炼,如果你接受并通过了,我可以回答你的所有疑问,并且送你回去。相反,你将继续留在这等待。”

     小八:“……接受(ノ`Д)ノ另外,你是在cosplay吗?”

     貂蝉:“不是(ノ`Д)ノ,这是一场关于力量和智慧的考验。决斗开始时,我将向你抛出n块魔法水晶。魔法水晶具有跟踪作用,除非你破解上面的魔法,否则一定会被攻击。如何破解?每块魔法水晶上有个神秘攻击值,是古代花丸幼稚王国消失已久的罗马数字,只要你快速转换成阿拉伯数字并大声喊三遍,水晶球就会失效。”

    貂蝉:“我看你骨骼清奇,是开黑界的奇才,那就给你几点提示吧。

1. 罗马数字基本字符: IVXLCDM,分别表述阿拉伯数字1510501005001000

2.重复数次:一个罗马数字重复几次,就表示这个数的几倍。

3.右加左减:

1)在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。

2)在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。

3)左减的数字有限制,仅限于IXC。比如45不可以写成VL,只能是XLV。但是,左减时不可跨越一个位值。比如,99不可以用IC100-1)表示,而是用XCIX[100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。)

4)左减数字必须为一位,比如8写成VIII,而非IIX

5)右加数字不可连续超过三位,比如14写成XIV,而非XIIII

4.数码限制:同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL

以上为阿拉伯数字转罗马数字的规则,而你需要破解对应罗马数字的阿拉伯数字是多少。”

小八:“不懂。”

貂蝉:“看样例(ノ`Д)ノ”

    作为小八队友的你,快点帮他回到现实世界,然后愉快的开黑吧。

Input

输入数据有多组,每组数据输入一个罗马数字n,(1n3999)。

Output

对于每组输入数据,输出罗马数字对应的阿拉伯数字,每组输出占一行。

Sample Input

VIII

XIX

XXXIX

XXI

XLI
Sample Output

8

19

39

21

41

代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

char s[100];

int main()
{
    while(~scanf("%s",s))
    {
        int i,len=strlen(s),ans=0;
        for(i=0;i<len;i++)
        {
            if(s[i]=='I'&&s[i+1]=='V')ans-=1;
            else if(s[i]=='I'&&s[i+1]=='X')ans-=1;
            else if(s[i]=='X'&&s[i+1]=='L')ans-=10;
            else if(s[i]=='X'&&s[i+1]=='C')ans-=10;
            else if(s[i]=='C'&&s[i+1]=='D')ans-=100;
            else if(s[i]=='C'&&s[i+1]=='M')ans-=100;
            else if(s[i]=='I')ans+=1;
            else if(s[i]=='V')ans+=5;
            else if(s[i]=='X')ans+=10;
            else if(s[i]=='L')ans+=50;
            else if(s[i]=='C')ans+=100;
            else if(s[i]=='D')ans+=500;
            else if(s[i]=='M')ans+=1000;
        }
        printf("%d\n",ans);
    }
    return 0;
}

E:

E.时空之门
Time Limit: 1000 MSMemory 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<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

char s[1005];

int main()
{
    while(gets(s))
    {
        int len=strlen(s),i,ans=0;
        for(i=0;i<len-1;i++)
        {
            if(s[i]=='i'||s[i]=='I')
            {
                if(s[i+1]=='f'||s[i+1]=='F')
                {
                    ans++;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

G:

G.真假小妖
Time Limit: 1000 MSMemory Limit: 256000 K
Total Submit: 1236 (482 users)Total Accepted: 425 (387 users)Special Judge: No
Description

风和日丽的一天,涂山小八正在悠哉的晒着太阳。突然,一群小妖涌了进来,一问才知道又是东方平平捉弄她,使了个法术造了一群涂山小妖的盗版。现在分不清真小妖和假小妖了。

小八微微一笑,开始有条有理的组织起来鉴别真假。原来涂山小妖都有一个ID数字,这些ID数字都是特别的回文数字。平平不知道此事,造的假小妖的ID数字都不是回文数字。

看在小八都这么机智的份上,帮帮她吧?

Input
   输入数据有多组,每组占一行,输入一个整数n(1n109),表示小妖的ID数字。
Output

对于每组数据,如果这个小妖是真小妖的话,输出“yes”,否则输出“no”(输出不包括引号),每组输出占一行。

Sample Input

12345

12321

2
Sample Output

no

yes

yes

代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

char s[20];

int main()
{
    while(~scanf("%s",&s))
    {
        int i,flag=1,len=strlen(s);
        for(i=0;i<len/2;i++)
        {
            if(s[i]!=s[len-i-1])
                flag=0;
        }
        if(flag)printf("yes\n");
        else printf("no\n");
    }

    return 0;
}

H:

H.小妖的下属
Time Limit: 1000 MSMemory Limit: 256000 K
Total Submit: 832 (212 users)Total Accepted: 81 (67 users)Special Judge: No
Description

话说上回涂山小八成功解出真假小妖的难题,东方平平觉得很不开心,仿佛受到了嘲笑。于是他又造了一批假的小妖,气鼓鼓的找到了小八。

平平:“哼,我造的这批小妖ID号也有特殊属性。简单来说,一个小妖所领导的小妖个数就是它的ID号可以分解的方式数,所谓分解,就是把n分解成若干个连续正整数之和。如ID=15的小妖,下属有3人,因为它有(12345),(456),(78)共3种分解方式。现在我想问你,每个小妖的下属个数是多少,赌上我刚买的一打妖馨斋“一品五彩棒”棒棒糖。”

如果你能帮小八解出来的话,小八会把一品五彩棒分给你哦~

Input
输入数据有多组,每组输入一个整数n(1n109),表示小妖的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<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {
        int ans=0,k=1;
        for(i=2;i<n;i++)
        {
            k+=i;
            if(n-k<0)break;
            if((n-k)%i==0)ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

I:

I.丢失的数字
Time Limit: 800 MSMemory Limit: 256000 K
Total Submit: 1541 (252 users)Total Accepted: 79 (71 users)Special Judge: No
Description

据说圣玛格丽特学院的图书馆上方住着一个金色妖精——维多利加,她有金色闪亮的头发和翡翠绿的双瞳,是个娇小宛如陶瓷娃娃般美丽容颜的少女。

“以智者知名,为愚者代言。”拥有智慧之泉的维多利加可是无所不知的哦~这不,数字收藏家涂山小八哭着跑来找她,说好盆友东方平平想送给她一个数字,但是自己的数字放的太乱了。

“我想找出我现在没有的最小正整数,让平平送给我,你能帮我找吗?”

嘛~维多利加这么可爱,当然会帮你啦~

Input

输入数据有多组,每组数据第一行输入一个整数n(1≤n≤106),表示小八拥有的数字个数。第二行输入n个整数ai(-109ai109),表示小八拥有的数字。

Output

对于每组输入数据,输出小八想让平平送给他的数字,每组输出占一行。

Sample Input

3

1 2 0

4

3 4 -1 1

Sample Output

3

2
Hint

数据量较大,建议使用scanf和printf输入输出。


桶排

代码:

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

int v[1000005];

int main()
{
    int n,i,k;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&k);
            if(k>0&&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 MSMemory 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<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
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<www;i++)
                {
                    if(strcmp(zhan,s[i])==0)
                    {
                        if(v[i][0]>=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<www;i++)
                {
                    if(strcmp(zhan,s[i])==0)
                    {
                        if(fir=='q')v[i][0]++;
                        if(fir=='s')v[i][1]++;
                        if(fir=='k')v[i][2]++;
                        printf("Y\n");
                        break;
                    }
                }
                if(i==www)
                {
                    strcpy(s[www],zhan);
                    if(fir=='q')v[www][0]++;
                    if(fir=='s')v[www][1]++;
                    if(fir=='k')v[www][2]++;
                    printf("Y\n");
                    www++;
                }
                getchar();
            }
        }
        memset(v,0,sizeof(v));
        memset(s,0,sizeof(s));
    }
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值