2020蓝桥杯第一轮省赛B组题解(附题面)

前言

4号省赛,到今天依旧没有一篇题解,索性自己写一个,当然不是标准答案,纯粹是个人的理解,可能会有错误,欢迎指正。个人认为这次省赛的题质量不错,都是能写的题,难度梯度也不错,最后一题可能偏简单了。
填空答案没保存,因此只写思路解法。
编程题稍后补上代码。

A 跑步训练

类似的问题很多,比如蜗牛爬树,爬井什么的。可以直接算,也可以编程模拟。需要注意的是最后一次跑步的一分钟剩余体力是400而不是100。

B 纪念日

没什么好说的,手算吧。听说excel里有函数可以直接得到天数。

C 合并检测

假设总体为1,合并检测需要消耗1/K盒试剂,其中有0.01的被感染者需要额外花费0.01*K盒试剂,即总共需要花费1/K+K/100盒试剂,根据基本不等式得K取10。

D REPEAT程序

可以写翻译程序,也可以取巧,替换文本改成代码,然后直接跑。
写翻译程序的话可以写一个dfs,每次发现repeat就起一个新的调用,传的参数我是用的缩进,以此得到优先级,缩进较长的需要优先计算得到结果。发现本行缩进小于参数时即可返回到上层。
给一个我写的翻译程序,基于dfs处理嵌套REPEAT

#include <iostream>
#include <cstdio>
using namespace std;

const int maxn = 1000010;
string s[1005];
int i = 0;
int getp(string s)
{
   
	int p = 0;
	while(s[p] == ' ')p++;
	return p;
}
int x = 0;
int dfs(int y)
{
   
	int p = 0,v = 0;
	while(x<i){
   
		x++;
		cout << s[x] << endl << x << ' ' << y << ' ' << v << endl;
		p = getp(s[x]);
		if(p<y){
   
			x--;
			return v;
		}
		if(s[x][p] == 'R')
		{
   
			v+=(s[x][p+7]-'0')*dfs(p+4);
		}
		else if(s[x][p] == 'A'){
   
			v+=s[x][p+8]-'0';
		}

	}
	return v;
}
int main()
{
   
    freopen("prog.txt","r",stdin);

    long long ans = 0;
    //getline(cin,s[0]);
    while(!cin.eof()){
   
    	getline(cin,s[i]);
    	i++;
    }
    ans = dfs(0
  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值