您的位置:首页 > 其它

2016Hrbust软件学院ACM新生选拔赛(一)

2016-09-23 21:02 447 查看


1370: 1.JoJo酱是要成为ACM王的男人!

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 5  Solved: 5

[Submit][Status][Web
Board][Edit] [TestData]

Description

荣誉,名声,妹纸,曾经拥有世界上一切的“ACM王” asdf,在临死前留下了一句话,让世界的人们,趋之若鹜奔向机房:“想要我的代码吗?想要的话可以给你,去找吧!我把一切都放在那里了!”,世界迎来了“撸代码时代”。

时代传承的意志,时代的变迁,人们的梦想。

只要人们继续追求Ac的快感,这一切的一切都将永不停止。

17岁的JoJo酱怀揣着梦想,奔向代码的海洋。

首先,他需要解决的第一个问题就是输出以下图案(注意每一行结束部分都没有多余的空格,建议复制):

A           CCCCCCCCCCCCC          M           M
A A          C                     M M         M M
A   A         C                    M   M       M   M
AAAAAAA        C                   M     M     M     M
A       A       C                  M       M   M       M
A         A      C                 M         M M         M
A           A     CCCCCCCCCCCCC    M           M           M


Input

本题不需要任何输入

Output

输出题干中的图案

Sample Output

A           CCCCCCCCCCCCC          M           M
A A          C                     M M         M M
A   A         C                    M   M       M   M
AAAAAAA        C                   M     M     M     M
A       A       C                  M       M   M       M
A         A      C                 M         M M         M
A           A     CCCCCCCCCCCCC    M           M           M

HINT

建议复制粘贴输出。(最后一行A字母前有空格)

Source

mengxiang000

题解: 按题意输出即可,注意别多(少)复制空格。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int main()
{
    printf("      A           CCCCCCCCCCCCC          M           M\n");
    printf("     A A          C                     M M         M M\n");
    printf("    A   A         C                    M   M       M   M\n");
    printf("   AAAAAAA        C                   M     M     M     M\n");
    printf("  A       A       C                  M       M   M       M\n");
    printf(" A         A      C                 M         M M         M\n");
    printf("A           A     CCCCCCCCCCCCC    M           M           M\n");
}


1371: 2.JoJo酱的数学旅行

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 8  Solved: 4

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱为了成长起来,甚至周末都泡在机房里。这样勤奋努力的JoJo让一些妹纸对他芳心暗许,很多妹纸都喜欢问JoJo数学题,今年中秋节的时候,LaLa问JoJo这样一个问题:

给你三个数A,B,C,计算A+B-C的值。

JoJo酱觉得很难,觉得需要几分钟来思考,就对妹纸说,”给我一首歌的时间,我给你一个Ac的代码“。

Input

输入包含多组,处理到文件结束(EOF)

每组输入包含一行,三个元素:A,B,C(-10000<=A,B,C<=10000)

Output

每组输出结果占一行,表示A+B-C的值

Sample Input

8 1 5

Sample Output

4

HINT

Source

mengxiang000

题解:

简单题 注意别忘了多组和!EOF

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int a,b,c;
int main()
{
while(~scanf("%d%d%d",&a,&b,&c))
{
printf("%d\n",a+b-c);
}
}

1372: 3.JoJo酱的追求者们

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 16  Solved: 8

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱帮助了LaLa妹纸之后,越来越多的妹纸过来问JoJo酱问题,JoJo酱为了方便记住妹纸的名字和长相,JoJo酱列了一个花名册,名册中一共包含n个妹纸的名字,并且从1-n将所有妹纸都编上了号,并且想要记录每个妹纸都一共问了自己多少道题,方便知道哪些妹纸和自己更加亲近一些。

JoJo酱估计手动统计这个问题需要上百年的时间,所以他就敲了一份代码,使得自己能够统计每个妹子都问了自己多少个问题。

Input

输入包含多组数据,处理到文件结束(EOF)

每组数据的第一行包含两个整数n(1<=n<=100),t(1<=t<=1000),表示一共有n个妹纸,一共问了t次问题

接下来一行,包含t个整数a(1<=a<=n)表示编号为a的小姑娘问了JoJo酱一个问题。

Output

每组数据输出包含n行。

每行包含一个整数,在第i行输出的值代表编号为i的妹纸问了JoJo多少道题

Sample Input

5 6
1 1 2 2 2 3

Sample Output

2
3
1
0
0

HINT

Source

mengxiang000

题解: 中等题。桶排序,n个妹子相当于n个桶(活该没XXX系列),妹子编号为1-n相当于把桶编号为1-n,每次编号为i的妹子提问一个问题相当于往编号为i的桶里丢一瓶可乐,最后输出每个桶里可乐的数量。注意:每次循环都要把桶清空。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int n,t,l;
int bucket[105];
int main()
{
while(~scanf("%d%d",&n,&t))
{
for(int i=1;i<=n;i++)
bucket[i]=0;
for(int i=0;i<t;i++)
{
scanf("%d",&l);
bucket[l]++;
}
for(int i=1;i<=n;i++)
printf("%d\n",bucket[i]);
}
}


1373: 4.JoJo酱的辉煌事迹

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 8  Solved: 6

[Submit][Status][Web
Board][Edit] [TestData]

Description

一年后,JoJo来到了弗雷尔卓德大陆,夺得”循环“杯大赛冠军,又横跨了守望者之海,来到了艾欧尼亚,又夺得了”输出“杯大赛冠军,世界为了纪念JoJo酱的辉煌事迹,在哈尔滨举行了“循环输出”杯大赛,JoJo兴奋不已,连夜坐飞机赶回哈尔滨太平国际机场,参加出题工作。

JoJo所出的所有题目中,最引以自豪的题目内容是这样的:

输入一个整数n

输出JojoV5+n个感叹号。

那么你的任务,就是帮助JoJo炫耀他的辉煌事迹

Input

输入包含多组,每组数据包含一个整数n(0<=n<=100),表示要输出的感叹号的个数

Output

输出JojoV5+n个感叹号,具体参考样例输入输出(所有输出的字符都是英文的,不要误打中文符号)

Sample Input

5

Sample Output

JojoV5!!!!!

HINT

(所有输出的字符都是英文的,不要误打中文符号)

Source

mengxiang000

题解:简单题,注意大小写。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int n;
int main()
{
while(~scanf("%d",&n))
{
printf("JojoV5");
for(int i=0;i<n;i++)
printf("!");
printf("\n");

}
}


1374: 5.JoJo酱的旅行

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 27  Solved: 10

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱在漫长的修炼之后,决定到A城市继续磨练自己,JoJo酱便借了一头驴准备奔向A城市,已知到A城市的路径长度为L,初始的时候JoJo酱准备了p吨驴粮,驴每行进一个单位长度的路,就会消耗一吨驴粮,已知整条路径上有两个补充粮食的地方,位子分别是pos1,pos2,能够补充的粮食的吨数分别为a1,a2。假设JoJo酱可以抗无数吨粮食赶路,问从起点到A城市最少需要补充多少次粮食?如果JoJo酱到达不了A城市,那么输出TAT

Input

输入包含多组数据,处理到文件结束(EOF)

每组输入包含六个整数,L,p,pos1,a1,pos2,a2.

数据范围:

1<=L<=10000.0<pos1,pos2<L(pos1!=pos2)  1<=a1,a2<=10000

Output

每组输出对应一行,表示最少补充粮食的次数,如果到达不了A城市,输出TAT。

Sample Input

5 100 1 2 2 4
5 1 1 4 2 3
5 0 1 4 2 3

Sample Output

0
1
TAT

HINT

每个站点只能添加一次粮食

Source

mengxiang000

题解:难题 ,坑点很多,

1:pos1,pos2的位置需要判断,如果pos1>pos2,则pos2才是经过的第一个能量站,交换两个站的位置和能量值。

2:如果以p的能量就可以走完全程L,就不需要能量站。输出0

3:如果以p的能量能走过pos2站:如果p加上两个能量站的值都不能走到l,输出TAT,如果p加上两个能量站中较多的能量可以走到l,输出1.否则输出2

4:如果以p的能量能走过pos1站:如果p加上第一个能量站的能量不能到达pos2,输出TAT,如果p加第一个能量站的能量能到达l,输出1,如果p加上两个能量站的和可以到达l.输出2,否则输出TAT。

5:如果以p的能量不能到达pos1,输出TAT。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int l,p,pos1,a1,pos2,a2;
int main()
{
while(~scanf("%d%d%d%d%d%d",&l,&p,&pos1,&a1,&pos2,&a2))
{
if(pos1>pos2)
{
swap(pos1,pos2);
swap(a1,a2);
}
if(p>=l)
{
printf("0\n");
continue;
}
else
{
if(p>=pos2)
{
if(p+a1+a2<l)
{
printf("TAT\n");
continue;
}
else
{
if(p+max(a1,a2)>=l)
{
printf("1\n");
continue;
}
else
{
printf("2\n");
continue;
}
}
}
else if(p>=pos1)
{
if(p+a1<pos2)
{
printf("TAT\n");
continue;
}
else
{
if(p+a1>=l)
{
printf("1\n");
continue;
}
else
{
if(p+a1+a2>=l)
{
printf("2\n");
continue;
}
else
{
printf("TAT\n");
continue;
}
}
} }
else
{
printf("TAT\n");
continue;
}
}
}
}


1375: 7.JoJo酱的网吧五连坐

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 10  Solved: 9

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱坐上了公交车,结识了四位来自322城市的大牛,欢天喜地的聊起了各自Acm的故事,JoJo酱了解到各位大神的世界OJ刷题数都达到了50000+题,激动不已,非常想要跟几位大牛一起刷几道难题切磋技艺,然后他们五个人在A城市的215路下了车,来到了一个网吧,决定找一个五连坐(就是五个人坐在一排)。

这儿的网吧有n行m列,其中一行中所有的座位都是相邻的,两行座位之间是空出来过道的。我们用一个n*m的矩阵来表示,其中“X”表示这个座位已经有人坐了,其中“O”(大写的欧),表示这个座位没有人坐。问他们是否能够找到一个五连坐。

Input

输入包含多组数据,处理到文件结束(EOF)

每组输入第一行包含两个整数,n,m,表示这个网吧有n行m列。

接下来n行,每行保证只有m个字符,“O”表示这个座位没有人占用,“X”表示这个座位已经有人占用了。

数据范围:

1<=n<=15 5<=m<=15

Output

如果他们五个人能够找到一个连坐,输出“Yes”,否则输出“No”

Sample Input

3 5
OOOOO
XXXXX
XXXXX
6 6
OOXOOO
OOXOOO
OOXOOO
OXOOOO
OOXOOO
OOXXXX

Sample Output

Yes
No

HINT

注意,每行的座位相连才叫连坐,每列的座位是不相邻的,题干中有说明,每两行座位之间是有过道的

Source

mengxiang000

题解:中等题,首先定义一个二维字符数组来存状态,对于每一行,查询是否有连续的5个‘O’,如果有,让标记变量flag=1,跳出即可(只要找到一个五连坐就可以),最后看标记是否为1, 注意大小写。

代码:#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
char a[20][20];
int n,m;
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
scanf("%s",a[i]);
int flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]=='O'&&a[i][j+1]=='O'&&a[i][j+2]=='O'&&a[i][j+3]=='O'&&a[i][j+4]=='O')
{
flag=1;
}
if(flag)
break;
}
if(flag)
break;
}
if(flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}

1376: 6.JoJo酱的第一次公交体验

Time Limit: 1 Sec  Memory Limit:32 MB
Submit: 6  Solved: 3

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱旅行到了A城市,A城市是高手云集的地方,JoJo酱听说A城市的某些景点是可以通过101公交车环行观看的,然后他就来到了一个公交车首发站点。JoJo酱来之前刚好发了一辆车且没有人候车。随后JoJo酱发现,每辆公交车只能坐m个人而且只有满员的时候才会发车。JoJo酱一共观察了n次,每次会多来a[i]个人。JoJo酱知道一共来了多少人后不用查就知道了一共发了几辆车、还剩下多少人。 相信同样聪明的你也是知道的。(注意Hint)

Input

输入一个正整数T,代表有T(≤10)组数据。

接下来一行输入两个正整数n,m。分别代表JoJo观察了n次,每辆公交车能坐m个人。

接下来一行包括n个正整数a[i] (≤100) 代表JoJo每次观察后多了的人数。

Output

在一行中输出两个数分别是发车的数量和剩下候车人数,这两个数用空格隔开。

在首发站台有无数的空车。

Sample Input

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

Sample Output

3 3
1 2

HINT

忽略JoJo酱没看到或者直接上车走了的情况。

Source

Tabris

题解:中等题,用sum记录人数,用ans记录发车的数量。对于Jojo的每一次观察,sum+=来的人数,然后判断sum中有多少个m,ans+=m的个数。sum变成剩下的人数,sum%=m,最后,输出ans和sum即可。

代码:#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int n,m,t,x;
int main()
{
scanf("%d",&t);
while(t--)
{
int ans,sum;
ans=sum=0;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
sum+=x;
ans+=(sum/m);
sum%=m;
}
printf("%d %d\n",ans,sum);
}

}

1377: 8.爱丽丝梦游仙境

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 4  Solved: 3

[Submit][Status][Web
Board][Edit] [TestData]

Description

爱丽丝从6岁时进入过一次奇幻仙境后,她就总是觉得自己会做噩梦,梦见的都是奇幻仙境中那些不可思议的人和事。
距离那一次历险奇遇已经过去了十三年,曾经漫游奇境的爱丽丝已经19岁。生活在一个华丽富庶的大庄园里,衣食无忧,生活奢靡,在社会风气的带动下,渐渐的成长为家庭心目中所冀望的那种贵族女子,却早已忘却自己在6岁时的那些奇妙无比的经历。时光荏苒,在家族为她举办的19岁的生日宴会上,一位富豪的儿子向他求婚,对方是海密仕·艾斯科,海密仕虽然家财万贯,性格却愚笨而木讷,跟爱丽丝根本不是一路人。爱丽丝发觉到自己并不想要这样的生活,渴望改变现状的她在兔子先生的带领下,爱丽丝再次步入仙境。
为了拒绝海密仕的求婚,爱丽丝需要在奇幻仙境中收集正好n个自由果实,不能多也不能少。为了摘取自由果实,兔子先生带领爱丽丝来到了幽幻小径,在这条小径上,人们只能向前和后两个方向走。
兔子先生和爱丽丝来到了一条长度为s米的幽幻小径的一端,幽幻小径上长满了自由果实。这时,爱丽丝发现了红心王后在幽幻小径的另一端!
“是谁在那里!来人呐,砍掉他们的头!”红心王后生气地说。
糟了,只有兔子先生可以摘取自由果实,可是爱丽丝已经来不及对兔子先生说,要摘取多少自由果实了!
机智而又可爱的爱丽丝急中生智,对兔子先生说:“兔子先生,请你从我这里一直向前走,摘取自由果实,直到遇到红心王后,再返回来摘取自由果实,遇到我之后再返回去……如此反复,直到我和红心王后相遇。”【PS:来不及说那你还说那么多???】
话刚说完,红心王后就以v1(米每秒)的速度向爱丽丝跑去,爱丽丝也以速度v2(米每秒)向红心王后跑去。与此同时,兔子先生开始以v3(米每秒)的速度行动,摘自由果实,而兔子先生每走1米能且只能摘取一个自由果实,兔子先生在爱丽丝与红心王后之间不断往返摘取果实不作停歇。
在奔跑途中,爱丽丝微微一笑,从口袋中掏出一个神奇的奶油泡芙。吃下这个泡芙后,爱丽丝的身体会变大,爱丽丝的身体半径能以k米每秒的速度不断增长(变大过程中爱丽丝和红心王后还在不断奔跑)!
最后,爱丽丝和红心王后相遇,此时兔子先生正好摘取了n个自由果实。请问,爱丽丝究竟是在哪个时刻吃下奶油泡芙的?
没有吃奶油泡芙的爱丽丝和红心王后视为点,吃下泡芙后的爱丽丝因变胖而视作圆。在0时刻,爱丽丝和兔子先生在幽幻小径的一端,红心王后在另一端。从0时刻开始,爱丽丝、兔子先生和红心王后同时开始行动,爱丽丝与红心王后相遇的时刻,兔子先生停止摘取果实。爱丽丝吃泡芙一口吞,可忽略时间,兔子先生回头的时间忽略。红心王后不会因为爱丽丝变胖而看呆或者被吓到而停下或放慢脚步,爱丽丝变胖也不会影响其速度也不会变丑。兔子先生一定能摘取到足够的果实。求爱丽丝吃下奶油泡芙的时刻。输入数据保证最后答案为整数。

Input

数据输入:
多组输入数据,处理文件到结束(EOF)。
每组数据一行,输入6个整数,n,s,k,v1,v2,v3。分别代表需要摘取的自由果实数量(n),幽幻小径的长度(s),吃下奶油泡芙后身体半径增长速度(k),红心王后的奔跑速度(v1),爱丽丝的奔跑速度(v2),兔子先生的摘取速度(v3)。
0<n<1000000000;
0<s<1000000000;
0<k<100000;
0<v1<100000;
0<v2<100000;
0<v3<100000;
v3≥v2+k.

Output

对于每组样例,答案占一行。输出一个整数,代表爱丽丝吃下泡芙的时刻。

Sample Input

10 10 2 1 2 5
15 15 2 3 2 5

Sample Output

0
3

HINT

Source

LuLu

题解:难题,在两人碰面前,兔子先生一直在奔跑。我们利用n和v3 可以求出兔子先生的奔跑时间t。我们先假设没有吃泡芙内个条件,则在t时间内,两人的路程和k可以求出,现在实际的路程是s,路程差就是爱丽丝身体变大经过的距离,再通过k,求出这个身体变大的时间tt,一共的时间为t,身体变大到碰面的时间为tt,则身体开始变大时刻为t-tt。在计算过程中会出现小数,所以需要选择double

代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
double n,k,s,v1,v2,v3;
int main()
{
while(~scanf("%lf%lf%lf%lf%lf%lf",&n,&s,&k,&v1,&v2,&v3))
{
double t=n/v3;
double ss=s-(v1+v2)*t;
double tt=ss/k;
printf("%.0lf\n",t-tt);
}
return 0;

}


1378: 9.JoJo酱的三角形

Time Limit: 1 Sec  Memory Limit:128 MB
Submit: 5  Solved: 5

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo酱在A城市玩的很开心,与四位大牛讨论了很多题,天很快就黑了下来,JoJo酱不舍与四位大牛就此分别,于是JoJo酱从口袋中拿出了n个魔法棒,想要拼接出来一个三角形的魔法环送给四位大牛。

但是JoJo酱觉得随便拼接出来一个三角形就送给人家显得太随意,他想从这n个魔法棒中取出一个最大周长的三角形送给他们,JoJo酱于是脑补了一个代码,很轻易的就找到了这三根魔法棒,同时也计算出了这个最大周长,当然也有可能JoJo酱用这n个魔法棒连一个三角形都拼接不出来,那么输出T_T。

Input

题目包含多组数据,处理到文件结束(EOF)

每组数据第一行输入一个整数n,表示JoJo酱有n个魔法棒(1<=n<=30)

接下来一行输入n个整数a1.a2............an,表示没根魔法棒的长度(1<=ai<=100)

Output

每组数据,输出一个整数sum,表示这个最大周长三角形的周长。

如果JoJo酱连一个三角形都没法组成,输出T_T

Sample Input

5
3 4 5 6 7
3
1 2 3

Sample Output

18
T_T

HINT

Source

mengxiang000

题解:中等题,把给出魔法棒按由小到大排序,每次我们取出长度最大的三根魔法棒I,j,k,(I>=j>=k)判断能否组成三角形,能,标记flag=1,ans记录边长和,跳出循环,最后判断标记是否为1,输出即可。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int a[40],n;
int main()
{
while(~scanf("%d",&n))
{
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int ans=0;
int flag=0;
for(int i=n; i>=1; i--)
{
for(int j=i-1; j>=1; j--)
{
for(int k=j-1; k>=1; k--)
{
if(a[j]+a[k]>a[i]&&a[i]-a[k]<a[j])//因为a[i]>a[j]>a[k],所以”任意两边之和大于第三边“只需要判断a[j]+a[k]>a[i],
{
ans=a[i]+a[j]+a[k];
flag=1;
}
if(flag)
break;
}
if(flag)
break;
}
if(flag)
break;
}
if(flag)
printf("%d\n",ans);
else
printf("T_T\n");
}
}


1379: 10.JoJo酱在刷题

Time Limit: 1 Sec  Memory Limit:32 MB
Submit: 4  Solved: 2

[Submit][Status][Web
Board][Edit] [TestData]

Description

JoJo终于从A城市回到了学校,作为一名要成为ACM王的男人的男人,JoJo酱要征服浩瀚的题海,于是日以继夜的刷题。

通过刷题JoJo知道数据在计算机中是用二进制表示的,于是JoJo酱学习了有关二进制的位运算。

正在学习位运算的JoJo酱遇到了一个非常easy的题目,很轻松的解决了。于是就把这道easy的题目分享给了你们。

题目大意:每次会给你两个二进制数,让你来求两者的异或值(位运算的一种,详见Hint)。

 

Input

第一行输入一个正整数T(≤20)。

接下来两行包括两个二进制数a,b(a,b的长度小于1000).输入保证a,b的长度相同且可能会含有前导0。

Output

输出这两个数的异或值(长度与输入保持一致),并换行。

Sample Input

2
010 100
000 111

Sample Output

110
111

HINT

在计算机语言中异或运算符为“^”,

异或运算是一种基于二进制下的一种运算,其规则如下:

对于两个二进制数每一位:(相同为0,不同为1);即:

0^0=0

0^1=1

1^1=0

1^0=1

Source

Tabris

题解:中等题,我们用字符串模拟异或运算,因为给出的两个串是等长的,每次我们判断a[i]和b[i]是否相等即可,相等输出0,否则输出1

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int t;
char a[400],b[400];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%s%s",a,b);
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]!=b[i])
printf("1");
else
printf("0");
}
printf("\n");
}
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: