2020第十一届蓝桥杯C++国赛B组真题和题解 (11.14决赛)

试题A:美丽的2(5分)

【问题描述】
小蓝特别喜欢 2, 今年是公元 2020 年, 他特别高兴。
他很好奇, 在公元 1 年到公元 2020 年(包含)中, 有多少个年份的数位中包含数字 2?

【答案提交】
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

题解

答案:563

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 1e9;
const int maxn = 1e5;
int cnt;
bool have2(int x){
   
	while(x != 0){
   
		if(x % 10 == 2){
   
			return true;
		}
		x /= 10;
	}
	return false;
}
int main(){
   
	int x;
	for(int i = 1; i <= 2020; i++){
   
		if(have2(i)){
   
			cnt++;
		}
	}
	cout << cnt;
    return 0;
}

试题B:扩散(5分)

【问题描述】
小 蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图, 每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了一下几个点: (0, 0), (2020, 11), (11, 14), (2000,2000)。
只有这几个格子上有黑色, 其它位置都是白色的。
每过一分钟, 黑色就会扩散一点。具体的, 如果一个格子里面是黑色, 它就会扩散到上、下、左、右四个相邻的格子中, 使得这四个格子也变成黑色
(如果原来就是黑色, 则 还是黑色)。
请问, 经过 2020 分钟后, 画布上有多少个格子是黑色的。

【答案提交】
这是一道结果填空的题, 你 只 需要算出结果后提交即可。本题的结果为一个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

题解

答案: 20312088

  • 做法:BFS
  • 坑点:标记访问的时机,一定要在入列前标记访问,才能保证每个点不在后面重复访问,这样1~2秒就能运行出结果,否则运行时间爆炸式增长。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 1e9;
const int maxn = 1e4;

const int SHIFT = 2020;  //为了使用vis数组. 设置一个偏移量使得坐标非负 
struct e{
   
	int x, y, step;
}nds[maxn];
int dir[4][2] = {
   {
   -1, 0}, {
   0, -1}, {
   1, 0}, {
   0, 1}};
bool vis[maxn][maxn];
int cnt;
int main(){
   
	nds[0] = e{
   0, 0, 0}, nds[1] = e{
   2020, 11, 0}, nds[2] = {
   11, 14, 0}, nds[3] = e{
   2000, 2000, 0};
	for(int i = 0; i < 4; i++){
   
		nds[i].x += SHIFT;
		nds[i].y += SHIFT;
		cout << nds[i].x << " " << nds[i].y << endl;	
	}
	queue<e> q;
	q.push(nds[0]);
	q.push(nds[1]);
	q.push(nds[2]);
	q.push(nds[3]); 
	while(!q.empty()){
   
		e now = q.front(); q.pop();
//		printf("x = %d, y = %d, step = %d\n", now.x, now.y, now.step);
		if(now.step == 2021){
   
			
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值