2024 睿抗机器人开发者大赛CAIP-编程技能赛-高职组(省赛)

RC-v1 我爱拼题啊

热爱拼题的你,请直接在屏幕上用汉语拼音输出这句话:我爱拼题啊!

输入格式:

本题没有输入。

输出格式:

在一行中输出,以惊叹号结尾。

输入样例:

输出样例:

wo3 ai4 pin1 ti2 a !

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
int main(){
	
	cout<<"wo3 ai4 pin1 ti2 a !"<<endl;
	
	return 0;
}

RC-v2 小白兔拔萝卜

拔萝卜.JPG

小白兔爱萝卜,但是它的力量有限,太大的萝卜它拔不动。

本题就请你根据小白兔的力量和拔出这个萝卜需要的力量,告诉小白兔,它能否拔出这只萝卜。

输入格式:

输入在一行里给出两个不超过 100 的正整数,分别是小白兔的力量和拔出这个萝卜需要的力量。

输出格式:

如果小白兔的力量足够大,就输出 Ba!,然后在第二行输出它多余的力量;如果不行,就输出 Suan4 le ba.,然后在第二行输出它不足的力量。注意两个力量值相等的时候,小白兔也是可以拔出萝卜的。

输入样例 1:

99 66

输出样例 1:

Ba!
33

输入样例 2:

55 77

输出样例 2:

Suan4 le ba.
22

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	if(a>=b){
		cout<<"Ba!"<<endl;
		cout<<abs(a-b)<<endl;
	}else{
		cout<<"Suan4 le ba."<<endl;
		cout<<abs(a-b)<<endl;
	}
	return 0;
}

RC-v3 逆行

nx.png

网上有个段子说:妻子在家听广播,听到某高速路上有一辆车在逆行,想到丈夫在那条高速上行驶,就打电话对丈夫说:“老公啊,你走的那条高速上有一辆车在逆行,你小心点。”她丈夫说:“何止啊!我看好几百辆车都在逆行!”

现在我们查了一下高速公路上拍到的好几百辆车的时速,发现有的朝东开,有的朝西开,都不知道是谁在逆行了…… 于是让我们简单粗暴地解决这个问题:朝哪个方向开的车多,哪个方向就是正确的,另一方就判为逆行(开玩笑的千万嫑当真)。现在就请你统计一下,有多少辆车是逆行的。

输入格式:

输入第一行给出一个正整数 N,为高速公路上拍到的车辆数,题目保证这是一个不超过 1000 的奇数。第二行给出 N 个整数,为每辆车的时速。我们用正数表示朝东开的时速,负数表示朝西开的时速。题目保证时速(绝对值)均不超过 200,并且时速没有 0,即没有一辆车是停在高速公路上不动的。

输出格式:

在一行中输出逆行的车辆数。

输入样例:

7
85 -90 110 95 112 -120 -70

输出样例:

3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a=0,b=0;
	for(int i=0;i<n;i++){
		int num;
		cin>>num;
		if(num<0){
			a++;
		}else{
			b++;
		}
	}
	cout<<min(a,b)<<endl;
	return 0;
}

RC-v4 翻炒字符串

给定一个字符串,要求你按照以下规则进行“翻炒”:

  1. 将字符串进行翻转;
  2. 如果字符串长度是个奇数,则将其正中间的字符删掉;否则将其两端的两个字符删掉;
  3. 将剩下的字符两两翻转,即第1、2个字符换位,第3、4个字符换位,以此类推。

最后输出结果串。

输入格式:

输入在一行中给出一个长度不超过 104 的、仅由英文字母组成的字符串。题目保证输入字符串的长度不小于 3。

输出格式:

在一行中输出执行了 3 步翻炒以后得到的结果串。

输入样例 1:

abcdefg

输出样例 1:

fgceab

输入样例 2:

abcdefgh

输出样例 2:

fgdebc

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin>>s;
	reverse(s.begin(),s.end());//1
	int len=s.size();
	if(len%2!=0){//2
		s.erase(len/2,1);
	}else{
		s.erase(0,1);
		s.erase(len-1,1);
	}
	for(int i=0;i<s.size();i+=2){
		cout<<s[i+1]<<s[i];//3
	}
	return 0;
}

RC-v5 主菜与配菜

cai.png

中国人吃饭讲究一桌席上要有主菜、配菜,还应该再加一碗汤。现在厨师长需要在给定时间内做好一桌席,给了你一系列主菜、配菜、汤的烹制时长,并且告诉你规定完成的时间,请你帮忙检查一下,哪些菜单是有可能完成的,哪些不可能。

输入格式:

输入第一行首先给出三个正整数 N1​、N2​、N3​(≤103),分别对应主菜、配菜、汤这三大类菜品的种类数。随后三行顺序给出 N1​ 种主菜、N2​ 种配菜、N3​ 种汤的烹制时间。这里我们将三大类菜品都分别从 1 开始顺序编号,每行第 i 个整数就对应该大类第 i 种菜品的烹制时间,每个烹制时间为不超过 60(分钟)的正整数。

接下来一行给出厨师长干活的开始时间和结束时间、以及候选的菜单数 K(≤20),其中的时间按 hh:mm 的格式给出,hh 按一天 24 小时制,范围在 [0, 23] 内;mm 是分钟,范围在 [0, 59]。题目保证结束时间在开始时间之后,且都在同一天内。
随后 K 行,每行给出一张菜单,格式如下:

m 菜品1 菜品2 …… 菜品m

其中 m 不超过 10,为一桌菜品的种类数;菜品i 给出第 i 种菜品的带前缀的编号 —— 主菜的前缀是 Z,配菜的前缀是 P,汤的前缀是 T。同一行的输入之间以空格分隔。

注意:这里假设厨师长是做完一道菜才做下一道菜的,不会并行。

输出格式:

对每一张菜单,如果同时包含了主菜、配菜和汤,并且所有菜品能在规定时间内完成,则在一行中输出 Yes,否则输出 No

输入样例:

2 4 3
30 45
10 15 5 20
60 25 40
08:30 11:40 4
7 T1 Z2 P4 T3 P1 P2 Z1
4 Z1 P1 P2 P3
5 P4 P2 Z1 P3 T2
6 Z2 P3 P3 P1 T1 P3

输出样例:

No
No
Yes
Yes

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010],c[10010];
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>b[i];
	for(int i=1;i<=k;i++)cin>>c[i];
	int aa,bb,cc,dd;
	char _;
	cin>>aa>>_>>bb>>cc>>_>>dd;
	int time=(cc*60)+dd-aa*60-bb;
	int t;
	cin>>t;
	while(t--){
		int an;
		cin>>an;
		int sum=0;
		int s,a1=0,a2=0,a3=0;
		for(int i=0;i<an;i++){
			cin>>_>>s;
			if(_=='Z'){
				a1=1;
				sum+=a[s];
			}
			if(_=='P'){
				a2=1;
				sum+=b[s];
			}
			if(_=='T'){
				a3=1;
				sum+=c[s];
			}
		}
		if(sum<=time &&a1==1&&a2==1&&a3==1)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}

RC-v6 最受欢迎的书

book.jpg

图书馆里有 n 种书,每种书分别有若干本可以借出。现在馆长给你一份清单,列出了每种书过去 d 天被借出了多少本,被还回来多少本。首先要请你算一下现在每种书还有多少本可以借出的,然后请你列出最受欢迎的书,也就是被借出过最多次的那些书。

输入格式:

输入第一行给出两个正整数 n(≤105)和 d(≤7),分别是书的种类数和借书还书记录的天数。

随后一行给出 n 个不超过 1000 的正整数,对应图书馆拥有的每种书的数量。

再后面有 n 行,每行给出一种书的借书还书记录,即 d 对数字,对应每一天借出的数量和还回的数量。题目保证这个清单是符合常理的,第一天还回的数量一定是 0,并且任何一天结束的时候,还书的总数量不会超过借书的总数量。

输出格式:

输出分成 n 行,每行输出一种书还可以借出的数量。如果这本书是最受欢迎的书,则在这个数量的后面加一个星号 *

输入样例:

5 3
500 200 800 30 180
15 0 35 2 20 35
180 0 10 80 67 50
88 0 0 28 10 0
1 0 1 1 5 1
100 0 57 80 100 77

输出样例:

467
73*
730
25
80*

样例解释:

以第 1 种书为例:开始有 500 本;第 1 天借出 15 本,还回 0 本,图书馆里还剩 485 本;第 2 天借出 35 本,还回 2 本,还剩 452 本;第 3 天借出 20 本,还回 35 本,还剩 467 本。这种书一共被借出了 70 次。

其他种类的图书同理计算。其中第 2 种和最后一种书都被借出了 257 次,都是最受欢迎的书。

代码长度限制

16 KB

C++

时间限制

400ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
int s[100010];
int main(){
	int n,d;
	cin>>n>>d;
	unordered_map<int,int> maxn;//得用unordered 直接map自动排序会超时两个样例
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	int maxx=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<d;j++){
			int a,b;
			cin>>a>>b;
			s[i]-=a;
			s[i]+=b;
			maxn[i]+=a;
			maxx=max(maxx,maxn[i]);
		}
	}
	for(int i=1;i<=n;i++){
		cout<<s[i];
		if(maxn[i]==maxx){
			cout<<"*";
		}
		cout<<endl;
	}
	return 0;
}

RC-v7 熊猫血

xmx.jpg

在“一年一度喜剧大赛”上有一部作品《少爷和我》,讲的是霸道管家龙傲天和憨厚少爷刘波的故事。管家有着霸总文学主人公所有的毛病,包括会咳出熊猫血……
血型是指血液各成分的抗原在个体间出现的差异。人类血型有数十种类型或系统,庞大复杂,如果把所有分类组合都考虑在内,可以细分出非常多种血型。熊猫血是 Rh 阴性血的俗称,东方人 Rh 阴性血型非常稀有,只占不到 0.5%。
本题给出一批熊猫血型的数据,请你帮前来查询的人查一下他们是否有熊猫血,最后统计一下他们中间的熊猫血占比是多少。

输入格式:

输入首先给出一批熊猫血型的数据:在第一行给出不超过 104 的正整数 N,随后 N 行,每行给出一种熊猫血型的编号,由不超过 8 个大写英文字母和数字组成。题目保证编号不重复。
随后是查询人的信息,首先是一个不超过 105 的非负整数 M,随后 M 行,每行给出一个人的血型编号,格式同上。

输出格式:

在第一行中输出 M 个由 0 或 1 组成的串,其中第 i 位对应第 i 个查询者,如果是熊猫血则为 1,否则为 0
第二行输出携带熊猫血者所占的百分比(意思是:有熊猫血的人数/查询总人数×100),输出小数点后 2 位。
第三行输出被查询次数最多的那种熊猫血型的编号。题目保证输出存在唯一。

输入样例:

3
RH0ABP1
RH0APY
BPYORH0
9
BPYORH1
RH0ABP2
RH0APY
APYORH0
RH0OPY
BPYORH0
RH1APY
RH0APY
ABPYRH0

输出样例:

001001010
33.33
RH0APY

时间限制

200 ms

内存限制

64 MB

栈限制

8192 KB

#include<bits/stdc++.h>
using namespace std;
string s[100010];
int main(){
	int n,m,xm=0;
	map<string,int> mp,maxn;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s[i];
		mp[s[i]]=1;
	}
	cin>>m;
	string sr="";
	int maxx=0;
	for(int i=0;i<m;i++){
		string p;
		cin>>p;
		if(mp.count(p)!=0){
			maxn[p]++;
			maxx=max(maxx,maxn[p]);
			sr+='1';
			xm++;
		}else{
			sr+='0';
		}
	}
	double sum=(xm*1.0/m*1.0)*100;
	cout<<sr<<endl;
	printf("%.2lf\n",sum);
	for(int i=0;i<n;i++){
		if(maxn[s[i]]==maxx){
			cout<<s[i]<<endl;
		}
	}
	return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值