2021常州市程序设计小能手真题及题解

第一题 书页(book)

样例输入

5

2 3

1

样例输出

R

分析:这道题就是一道if题,我是用三目运算符做的,如下

#include <bits/stdc++.h>
using namespace std;
int main()
{
   int n,m,x,y,d;
   cin>>n>>x>>y>>d;
   cout<<(d%2==x%2?'L':'R');
    return 0;
}

第二题 鸡羊同栏(animal)

鸡羊同栏

题目描述小 X 是 CZ 市著名的牧场主。他把 A 只鸡和 B 只羊圈养在一个围栏中。一只正常的鸡有 0 只角、2 条腿;一只正常的羊有 2 只角、4 条腿。某一天,一道 神秘的宇宙射线击中了牧场,导致其中的至多一个动物发生了变异。变异的动物角的只数与腿的条数中至少有一个数量变化了。例如,一只正常的鸡变异成了 3 只角 2 条腿。注意:变异以后动物也不可能有负数个数的角或腿。

小 X 只知道鸡和羊的数量、以及笼子中的动物一共有 C 只角 D 条腿。他想请你帮忙搞清楚变异的情况是什么。

输入

一行 4 个正整数 A,B,C,D,含义见问题描述。

输出

输出共 2 行。

第一行:如果可能是一只鸡变异了,输出它变异后角的只数与腿的条数;否则输出-1。 第二行:如果可能是一只羊变异了,输出它变异后角的只数与腿的条数;否则输出-1。

样例输入

2 2 3 15样例输出

-1

1 7提示提示样例1解释

只可能是一只羊变异成了 1 只角 7 条腿。(0+0+1+2=3,2+2+7+4=15)

样例输入2

2 2 4 12

样例输出2

-1

-1

样例2解释

不可能有动物变异。(0+0+2+2=4,2+2+4+4=12)

分析:可以通过A,B计算出没有变异时的角的个数X=2*B,腿的个数Y=2*A+4*B。因为变异必然会改变角或腿的个数,所以如果X=C并且Y=D,说明不可能有动物变异,输出-1和-1;

否则,则发生里变异,可以计算出变异的动物增加了C-X只角和D-Y条腿。

对于鸡来说,它变异后的角数是C-X,腿数是D-Y+2,所以只需要判断是否有C-X≥0,D-Y+2≥0即可。

对于羊同理,只需要判断是否有C-X+2≥0以及D-Y+4≥0即可

#include <bits/stdc++.h>
using namespace std;
int main()
{
   int a,b,c,d;
   cin>>a>>b>>c>>d;
   int x=2*b,y=2*a+4*b,xx=c-x,yy=d-y;
   if(xx==0&&yy==0){
   	cout<<-1<<"\n"<<-1;
   	return 0;
   }
   if(a&&xx>=0&&yy+2>=0){
   	cout<<xx<<" "<<yy+2<<"\n";
   }
   else{
   	cout<<-1<<"\n";
   }
   if(b&&xx+2>=0&&yy+4>=0){
   	cout<<xx+2<<" "<<yy+4<<"\n";
   }
   else{
   	cout<<-1;
   }
    return 0;
}

第三题  烧菜(cook)

题目描述

小X正在指挥M个机器人做一道家常菜:白灼青菜。把一根青菜烧成菜肴需要两个步骤:洗菜和水煮。显然,一根青菜不可能同时被清洗和水煮,也不可能先被水煮后被清洗。

现在小X告诉你他是怎么指挥的。每当一个机器人空下来:

·如果有青菜还没被清洗,就让这个机器人清洗这根青菜

·否则如果有青菜还没被水煮,就让这个机器人水煮这根青菜

·都没有就让这个机器人关机

现在一共需要把N根青菜烧成菜肴,任何一个机器人清洗都要花A分钟,水煮要花B分钟。小X想请你告诉他多少分钟后所有菜能被烧好。

输入

第一行4个正整数N,M,A,B,含义见问题描述。

输出

输出1行包含一个整数,表示多少分钟后所有菜能被烧好。

样例输入

3 2 9 5

样例输出

23

样例1解释

为了方便说明,把机器人标号为1号机器人和2号机器人;把青菜标号为1号、2号、

3号青菜。实际上,机器人间是没有区别的,青菜间也是没有区别的。

第分钟,1号机器人开始洗1号青菜,2号机器人开始洗2号青菜。

第9分钟,1号机器人开始洗3号青菜,2号机器人开始煮1号青菜。

第14分钟,2号机器人开始煮2号青菜。

第18分钟,1号机器人开始煮3号青菜。

第19分钟,2号机器人关机。

第23分钟,所有菜都被烧好了,1号机器人关机。

分析:经分析数据范围可知,总时长最多为2×1000×(2×1000+2×1000)=8×10^6,可以直接模拟。可以使用两个数组分别保存∶

● 在i时刻有多少台机器人变为空闲状态。

● 在i时刻有多少根菜被清洗完毕,变为"待水煮"状态。另外,保存当前"待清洗"和"待水煮"的菜的根数。

枚举当前时刻i,每次先更新当前"待水煮"的菜的个数,再使用当前空闲的机器人去清洗或水煮剩余的菜即可

参考程序

#include<bits/stdc++.h>
#define cio ios::sync_with_stdio(0);
using namespace std;
const int maxn=8e6+5;
int f[maxn],fb[maxn];
main(){
	cio
	int n,m,a,b;
	cin>>n>>m>>a>>b;
	int ans=0,ca=n,cb=0;
	f[1]=m;
	for(int i=1;i<maxn;i++){
		int cur=f[i];
		cb+=fb[i];
		if(!cur) continue;
		if(ca){
			int num=min(cur,ca);
			cur-=num;
			ca-=num;
			f[i+a]+=num;
			fb[i+a]+=num;
			ans=max(ans,i+a-1);
		}
		if(cb){
			int num=min(cur,cb);
			cur-=num;
			cb-=num;
			f[i+b]+=num;
			ans=max(ans,i+b-1);
		}
	}
	cout<<ans;
}

第四题  特殊字符 (string)

题目描述

小X接到了一个破译任务。他收到了一个仅包含小写英文字母字符串。

这个字符串十分特殊:在26个英文字母中,潜藏着一个特殊字符,这个字符的实际意义是一个字符串指令!

x个特殊字符相连的含义是:把后面x个字符组成的字符串变成它本身复制x遍的结果。例如,若特殊字符是”w”,那么字符串”wwabc”的破译结果就是”ababc”。

特殊的,若后面字符总数已经不足x个,则字符串改为由后面所有字符组成。例如,若特殊字符是”w”,那么字符串”wwwwabc”的破译结果就是”abcabcabcabc”。

字符串保证连续x个c字符后的x个字符都不会是c字符。例如”aaaba”不会是你要破解的字符串。(也就是特殊字符是不可能被复制的)

但是小X还不知道特殊字符是什么。所以他想问问你,对于每一种可能的特殊字符,破译结果的第K位是什么。

输入

第一行两个整数n,K,分别表示字符串的长度和询问第K位。

第二行一个字符串。

输出

输出一行包含一个长度为26字符串,分别表示若特殊字符是”a”,”b”,...,”z”那么破译结果的第K位是什么。

若破译结果长度小于K,输出”*”。

样例输入

10 10

aaaabbbccd

样例输出

bd**dddddddddddddddddddddd

提示

样例解释

若特殊字符是”a”,破译结果是”bbbcbbbcbbbcbbbccd”

若特殊字符是”b”,破译结果是”aaaaccdccdccd”

若特殊字符是”c”,破译结果是”aaaabbbdd”

若特殊字符是”d”,破译结果是”aaaabbbcc”

若特殊字符是其他,破译结果是”aaaabbbccd”

第五题 数字翻转 (flip) 

题目描述

小X在做数学题的时候发现了一类有趣的数字。把这样的数字写在一张不透明的纸上,

倒过来(把纸旋转180度,转轴垂直于纸面)看还是同样的数字。例如69就是这样的数字。

注意,小X用的是以下字体:

现在小X会问你Q次问题,每次问你L到R之间有多少个这样有趣的数字。

输入

第一行为1个正整数Q,表示有Q个问题。

接下来Q行,每行两个整数L和R描述问题。

输出

对于每个问题,依次输出一行一个整数表示答案。

样例输入

3
1 260
3333 8888
1 1234567654321

样例输出

11
17
77758

样例解释

1到260中有趣的数字:2、5、8、22、55、69、88、96、202、222、252

 第六题  战士(warrior)

题目描述

小X在玩一款操控战士和怪物战斗的游戏。战士初始生命值为旧、初始攻击力为iA。怪物只有一个,初始生命值为H。 战斗是回合制的,且有一个回合数限制M。如果在M回合内怪物还没有被杀死,小X就失败了。在每个回合,战士先行动,怪物 寻行动。 每当战士行动,小X可以命令战士做以下两件事中的一件: • 攻击,让怪物的生命值减少当前战士攻击力的数值。 ・ 磨刀,让战士攻击力增加dA。 每当怪物行动,怪物会攻击战士,使战士的生命值减少Ci,其中i为回合数。 当一个角色生命值小于等于0时,角色会死亡。 • 如果怪物死亡,那么战斗就结束了。 • 如果战士死亡,会立刻复活,将牛命值和攻击力恢复为初始数值. 现在小X想问问你,最少能在几个回合内杀死怪物。

分析:干不动了

 第七题  移动(move)

 我做出来答案错误70%,标准答案试过了,TLE80%,CSDN上也找不到答案,那位可以评论发一下。

下期发2020年的

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值