2023年天梯赛(l1 - l2全部题解)(第十二届)

2023-05-16

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int main() {
    puts("Good code is its own best documentation.");
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int a, b;
int main() {
    cin >> a >> b, a += b;
    cout << a - 16 << endl << a - 3 << endl << a - 1 << endl << a;
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n, m, k;
string x;
int main() {
    cin >> n >> x >> m >> k;
    if(k == n) cout << "mei you mai " << x << " de";
    else if(k == m) cout << "kan dao le mai " << x << " de";
    else cout << "wang le zhao mai " << x << " de";
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n, a, b, c;
int main() {
    cin >> n;
    while(n--) {
        cin >> a >> b >> c;
        if(c == a * b) puts("Lv Yan");
        else if (c == a + b) puts("Tu Dou");
        else puts("zhe du shi sha ya!");
    }
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n, k, x;
int main() {
    cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    cin >> k;
    while(k--) {
        int cnt = 0, wa = 0;
        for(int i = 0; i < n; ++i) {
            cin >> x;
            if(!x) continue;
            ++cnt;
            if(x != a[i]) ++wa;
        }
        if(cnt && !wa) puts("Da Jiang!!!");
        else puts("Ai Ya");
    }
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
string s, s1, s2, s3;
int n, a, b;
int main() {
	cin >> s >> n;
	while(n--) {
		cin >> a >> b >> s1 >> s2;
		s3 = s.substr(a - 1, b - a + 1);
		s.erase(s.begin() + a - 1, s.begin() + b);
		int len = s1.length();
		s1 += s2;
        int pos = s.find(s1);
		if(pos != s.npos) s.insert(pos + len, s3);
		else s.insert(s.length(), s3);
	}
	cout << s;
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n0, n1, n, flag0, flag1, res = INT_MAX;
vector<int> N0, N1;
int main() {
	cin >> n0 >> n1 >> n;
	for(int i = 2; i <= min(n0, n1); ++i) {
		if(!(n0 % i)) N0.emplace_back(i);
		if(!(n1 % i)) N1.emplace_back(i);
	}
	for(int i = 0; i < N0.size(); ++i) {
		for(int j = 0; j < N1.size(); ++j) {
			if(n0 / N0[i] + n1 / N1[j] == n && fabs(N0[i] - N1[j]) < res) {
				res = fabs(N0[i] - N1[j]), flag0 = n0 / N0[i], flag1 = n1 / N1[j];
			}
		}
	}
	if(res == INT_MAX) puts("No Solution");
	else cout << flag0 << " " << flag1;
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
long long n, na, nb, sa, sb;
long long sum(long long x) {
	long long cnt = 0;
	while(x) {
		cnt += (x % 10), x /= 10;
	}
    return cnt;
}
int main() {
	cin >> n;
	while(n--) {
		cin >> na >> nb, sa = sum(na), sb = sum(nb);
		if(!(na % sb) && !(nb % sa) || na % sb && nb % sa) cout << (na < nb ? "B\n" : "A\n");
		else if(!(na % sb)) cout << "A\n";
		else cout << "B\n";
	}
	return 0;
}

在这里插入图片描述L2-045 堆宝塔
堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下:

首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。
把第 1 块彩虹圈作为第 1 座宝塔的基座,在 A 柱放好。
将抓到的下一块彩虹圈 C 跟当前 A 柱宝塔最上面的彩虹圈比一下,如果比最上面的小,就直接放上去;否则把 C 跟 B 柱最上面的彩虹圈比一下:
    如果 B 柱是空的、或者 C 大,就在 B 柱上放好;
    否则把 A 柱上串好的宝塔取下来作为一件成品;然后把 B 柱上所有比 C 大的彩虹圈逐一取下放到 A 柱上,最后把 C 也放到 A 柱上。

重复此步骤,直到所有的彩虹圈都被抓完。最后 A 柱上剩下的宝塔作为一件成品,B 柱上剩下的彩虹圈被逐一取下,堆成另一座宝塔。问:宝宝一共堆出了几个宝塔?最高的宝塔有多少层?
输入格式:

输入第一行给出一个正整数 N(≤103),为彩虹圈的个数。第二行按照宝宝抓取的顺序给出 N 个不超过 100 的正整数,对应每个彩虹圈的直径。
输出格式:

在一行中输出宝宝堆出的宝塔个数,和最高的宝塔的层数。数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:

11
10 8 9 5 12 11 4 3 1 9 15

输出样例:

4 5

样例解释:

宝宝堆成的宝塔顺次为:

10、8、5
12、11、4、3、1
9
15、9
#include<bits/stdc++.h>
using namespace std;
int n, c, cnt, maxx;
stack<int> a, b;
int main() {
	cin >> n >> c;
	a.emplace(c);
	for(int i = 1; i < n; ++i) {
		cin >> c;
		if(c < a.top()) a.emplace(c);
		else if(b.empty() || c > b.top()) b.emplace(c);
		else {
			++cnt, maxx = max(maxx, (int)a.size());
			while(!a.empty()) a.pop();
			while(!b.empty() && b.top() > c) a.emplace(b.top()), b.pop();
			a.emplace(c);
		}
	}
	++cnt, maxx = max(maxx, (int)a.size());
	if(!b.empty()) ++cnt, maxx = max(maxx, (int)b.size());
	cout << cnt << " " << maxx;
	return 0;
}

在这里插入图片描述
L2-046 天梯赛的赛场安排
天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担,我们要求赛场的安排满足以下条件:

每位监考老师负责的赛场里,队员人数不得超过赛场规定容量 C;
每位教练需要联系的监考人数尽可能少 —— 这里假设每所参赛学校只有一位负责联系的教练,且每个赛场的监考老师都不相同。

为此我们设计了多轮次排座算法,按照尚未安排赛场的队员人数从大到小的顺序,每一轮对当前未安排的人数最多的学校进行处理。记当前待处理的学校未安排人数为 n:

如果 n≥C,则新开一个赛场,将 C 位队员安排进去。剩下的人继续按人数规模排队,等待下一轮处理;
如果 n<C,则寻找剩余空位数大于等于 n 的编号最小的赛场,将队员安排进去;
如果 n<C,且找不到任何非空的、剩余空位数大于等于 n 的赛场了,则新开一个赛场,将队员安排进去。

由于近年来天梯赛的参赛人数快速增长,2023年超过了 480 所学校 1.6 万人,所以我们必须写个程序来处理赛场安排问题。
输入格式:

输入第一行给出两个正整数 N 和 C,分别为参赛学校数量和每个赛场的规定容量,其中 0<N≤5000,10≤C≤50。随后 N 行,每行给出一个学校的缩写(为长度不超过 6 的非空小写英文字母串)和该校参赛人数(不超过 500 的正整数),其间以空格分隔。题目保证每所学校只有一条记录。
输出格式:

按照输入的顺序,对每一所参赛高校,在一行中输出学校缩写和该校需要联系的监考人数,其间以 1 空格分隔。
最后在一行中输出系统中应该开设多少个赛场。
输入样例:

10 30
zju 30
hdu 93
pku 39
hbu 42
sjtu 21
abdu 10
xjtu 36
nnu 15
hnu 168
hsnu 20

输出样例:

zju 1
hdu 4
pku 2
hbu 2
sjtu 1
abdu 1
xjtu 2
nnu 1
hnu 6
hsnu 1
16

#include<bits/stdc++.h>
using namespace std;
int n, c, res, cnt, a[5005], x;
string s;
priority_queue<int> Q;
int main() {
	cin >> n >> c;
	while(n--) {
		cin >> s >> x;
		cout << s << " " << ceil(1.0 * x / c) << endl;
		res += (x / c);
		if(x % c) Q.emplace(x % c);
	}
	while(!Q.empty()) {
		x = Q.top(), Q.pop();
		bool flag = true;
		for(int i = 0; i < cnt; ++i) {
			if(a[i] + x <= c) {
				a[i] += x, flag = false;
				break;
			}
		}
		if(flag) a[cnt++] = x;
	}
	cout << cnt + res;
	return 0;
}

在这里插入图片描述L2-047 锦标赛
有 2k 名选手将要参加一场锦标赛。锦标赛共有 k 轮,其中第 i 轮的比赛共有 2k−i 场,每场比赛恰有两名选手参加并从中产生一名胜者。每场比赛的安排如下:

对于第 1 轮的第 j 场比赛,由第 (2j−1) 名选手对抗第 2j 名选手。
对于第 i 轮的第 j 场比赛(i>1),由第 (i−1) 轮第 (2j−1) 场比赛的胜者对抗第 (i−1) 轮第 2j 场比赛的胜者。

第 k 轮唯一一场比赛的胜者就是整个锦标赛的最终胜者。
举个例子,假如共有 8 名选手参加锦标赛,则比赛的安排如下:

第 1 轮共 4 场比赛:选手 1 vs 选手 2,选手 3 vs 选手 4,选手 5 vs 选手 6,选手 7 vs 选手 8。
第 2 轮共 2 场比赛:第 1 轮第 1 场的胜者 vs 第 1 轮第 2 场的胜者,第 1 轮第 3 场的胜者 vs 第 1 轮第 4 场的胜者。
第 3 轮共 1 场比赛:第 2 轮第 1 场的胜者 vs 第 2 轮第 2 场的胜者。

已知每一名选手都有一个能力值,其中第 i 名选手的能力值为 ai​。在一场比赛中,若两名选手的能力值不同,则能力值较大的选手一定会打败能力值较小的选手;若两名选手的能力值相同,则两名选手都有可能成为胜者。

令 li,j​ 表示第 i 轮第 j 场比赛 败者 的能力值,令 w 表示整个锦标赛最终胜者的能力值。给定所有满足 1≤i≤k 且 1≤j≤2k−i 的 li,j​ 以及 w,请还原出 a1​,a2​,⋯,an​。
输入格式:

第一行输入一个整数 k(1≤k≤18)表示锦标赛的轮数。
对于接下来 k 行,第 i 行输入 2k−i 个整数 li,1​,li,2​,⋯,li,2k−i​(1≤li,j​≤109),其中 li,j​ 表示第 i 轮第 j 场比赛 败者 的能力值。
接下来一行输入一个整数 w(1≤w≤109)表示锦标赛最终胜者的能力值。
输出格式:

输出一行 n 个由单个空格分隔的整数 a1​,a2​,⋯,an​,其中 ai​ 表示第 i 名选手的能力值。如果有多种合法答案,请输出任意一种。如果无法还原出能够满足输入数据的答案,输出一行 No Solution。
请勿在行末输出多余空格。
输入样例1:

3
4 5 8 5
7 6
8
9

输出样例1:

7 4 8 5 9 8 6 5

输入样例2:

2
5 8
3
9

输出样例2:

No Solution

#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int k, x;
int res[N], id[N][20], tr[N][20];
bool flag = true;
int main() {
	cin >> k;
	for(int j = 1; j <= k; ++j) {
		for(int i = 1; i <= (1 << (k - j)); ++i) {
			cin >> x;
			if(j == 1) res[i * 2] = x, id[i][1] = i * 2 - 1, tr[i][1] = x;
			else if(tr[i * 2 - 1][j - 1] > x && tr[i * 2][j - 1] > x) flag = false;
			else {
				if(tr[i * 2 - 1][j - 1] <= x) res[id[i * 2 - 1][j - 1]] = x, id[i][j] = id[i * 2][j - 1];
				else res[id[i * 2][j - 1]] = x, id[i][j] = id[i * 2 - 1][j - 1];
				tr[i][j] = max({x, tr[i * 2 - 1][j - 1], tr[i * 2][j - 1]});
			}
		}
	}
	cin >> x;
	if(x < tr[1][k]) flag = false;
	else res[id[1][k]] = x;
	if(!flag) puts("No Solution");
	else for(int i = 1; i <= (1 << k); ++i) cout << res[i] << " \n"[i == (1 << k)];
	return 0;
}

在这里插入图片描述L2-048 寻宝图
给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图上一共有多少岛屿,其中有多少是有宝藏的岛屿。
输入格式:

输入第一行给出 2 个正整数 N 和 M(1<N×M≤105),是地图的尺寸,表示地图由 N 行 M 列格子构成。随后 N 行,每行给出 M 位个位数,其中 0 表示水域,1 表示陆地,2-9 表示宝藏。
注意:两个格子共享一条边时,才是“相邻”的。宝藏都埋在陆地上。默认地图外围全是水域。
输出格式:

在一行中输出 2 个整数,分别是岛屿的总数量和有宝藏的岛屿的数量。
输入样例:

10 11
01000000151
11000000111
00110000811
00110100010
00000000000
00000111000
00114111000
00110010000
00019000010
00120000001

输出样例:

7 2

#include<bits/stdc++.h>
using namespace std;
int n, m, cnt1, cnt2;
bool flag;
const int dx[4] = {-1, 0, 0, 1};
const int dy[4] = {0, 1, -1, 0};
int main() {
	cin >> n >> m, getchar();
	vector<vector<int>> a(n, vector<int>(m));
	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < m; ++j) {
			a[i][j] = (getchar() - '0');
		}
		getchar();
	}
	function<void(int, int)> dfs = [&](int x, int y) {
		if(a[x][y] != 1) flag = true;
		a[x][y] = 0;
		for(int i = 0; i < 4; ++i) {
			int nx = x + dx[i], ny = y + dy[i];
			if(nx >= 0 && nx < n && ny >= 0 && ny < m && a[nx][ny]) dfs(nx, ny);
		}
	};
	for(int i = 0; i < n; ++i) {
		for(int j = 0; j < m; ++j) {
			if(a[i][j]) {
				++cnt1;
				flag = false;
				dfs(i, j);
				if(flag) ++cnt2;
			}
		}
	}
	cout << cnt1 << " " << cnt2;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023年天梯赛(l1 - l2全部题解)(第十二届) 的相关文章

  • 完整的前端项目开发流程

    一个项目从一开始的计划到最后的上线 大概要经过以下的流程 产品设计原型审评项目分工项目开发项目测试项目构建项目上线 1产品设计 主要负责人 产品经理 产品经理前期负责收集销售 客户 领导的零散需求 然后做需求分析 完成产品设计 需求分析 需
  • debian11 sid

    编辑 etc apt sources list xff0c 增加下面二行 xff1a deb http ftp us debian org debian sid main contrib non free deb src http ftp
  • 单片机学习——定时器/计数器

    单片机必学系列 单片机学习 中断系统 单片机学习 存储器详解 xff08 程序存储器 片内RAM 拓展RAM EEPROM xff09 单片机学习 定时器 计数器 单片机学习 A D转换 更新ing 单片机学习 定时器 计数器 单片机必学系
  • ros bag包转mp4视频

    先在 rosbag2video py 脚本中修改相关配置参数 或者在终端命令改也行 如果使用脚本里的默认参数 则可直接运行 python rosbag2video py 2022 02 02 10 41 38 bag 代码如下 span c
  • 零基础入门Jetson Nano——通过OpenCV调用CSI和USB摄像头

    Jetson Nano学习 摄像头调用 前言一 CSI摄像头的调用1 安装v4l2 utils协助工具2 查看摄像头挂载情况3 查看挂载的摄像头详细参数情况4 检测摄像头能否正常工作5 使用OpenCV调用CSI摄像头方式一 利用Gstre
  • HTML搜索框的制作过程

    1 搜索框的构成 input标签和button标签我的理解应该就类似于行内块元素 xff0c 可以设置宽高 xff0c 但同时又不独占一行placeholder 占位文本 就是输入框一开始默认显示的文本 span class token t
  • Linux

    Linux 文件管理创建目录创建文件复制剪切 重命名删除归档 xff08 解压 压缩 xff09 文件查看帮助文档查看信息文件显示当前工作目录切换目录请屏显示文件内容文件内容搜索文件搜索链接文件搜索命令所在位置 Linux系统查看进程终止进
  • isalpha()库函数

    C C 43 43 isalpha 库函数 isalpha 函数用来检测一个字符是否是字母 xff0c 包括大写字母和小写字母 头文件 xff1a 属于ctype h头文件 xff1b 但也包含在iostream头文件下 语法原型 xff1
  • 计算机网络(谢希仁-第八版)第四章习题全解

    4 01 网络层向上提供的服务有哪两种 xff1f 试比较其优缺点 xff1f 虚电路服务和数据报服务 虚电路 优点 xff1a 1 可以提供可靠的通信服务 2 因为数据是沿着建立的虚电路进行传输的 xff0c 因此分组的首部不需要携带完整
  • Linux下线程池(ThreadPool)

    目录 一 线程池相关概念及其优点 二 线程池的实现 一 线程池相关概念及其优点 线程池一种线程使用模式 xff0c 线程过多会带来这个调度的开销进而影响整体的性能 xff0c 而线程池是提前准备好了线程等待着管理者进行分配任务 1 线程池的
  • Golang协程常见面试题

    协程面试题 交替打印奇数和偶数N个协程打印1到maxVal交替打印字符和数字交替打印字符串三个协程打印ABCChannel练习 交替打印奇数和偶数 下面让我们一起来看看golang当中常见的算法面试题 使用两个goroutine交替打印1
  • JS 几种常见的遍历方式

    JS 几种常见的遍历方式 目录 JS 几种常见的遍历方式for循环for in 循环for of 循环forEach循环map方法参考资料 for循环 普通的写法let arr 61 1 2 3 for let i 61 0 i lt ar
  • mp4 转 jpg 图片

    先在 rosbag2video py 脚本中修改相关配置参数 然后运行脚本 python mp4 2 jpg py 代码如下 span class token keyword import span span class token mod
  • C# WinForm界面设计教程

    WinForm 是 Windows Form 的简称 xff0c 是基于 NET Framework 平台的客户端 xff08 PC软件 xff09 开发技术 xff0c 一般使用 C 编程 C WinForm 编程需要创建 Windows
  • 2021 山东大学软件学院 软件工程应用与实践--YOLOV5项目代码分析——(5)

    2021SC 64 SDUSC detection class Detections detections class for yolov5 inference results def init self imgs pred files n
  • Centos7更改ssh端口报错解决

    Centos7 ssh 端口问题解决 报错如下 xff1a failed to start openssh server daemonssh failed to start openssh server daemon 问题总结 xff1a
  • Python 列表的常见操作

    Python 列表的常见操作 从形式上看 xff0c 列表会将所有元素都放在一对中括号 里面 xff0c 相邻元素之间用逗号 分隔 xff0c 如下所示 xff1a element1 element2 element3 elementn x
  • TortoiseGit的安装教程以及用法

    TortoiseGit的安装教程以及用法 TortoiseGit 是基于 TortoiseSVN 的 Git 版本的 Windows Shell 界面 它是开源的 xff0c 可以完全使用免费软件构建 TortoiseGit 支持你执行常规
  • 在idea中向Maven项目添加插件时出现的“找不到插件”错误解决

    大家用idea在pom xml中添加插件时 xff0c 一开始可能都会遇见添加的插件全报红的时候 现在我们把鼠标移到报红的地方 xff0c 他给了我们一个not found错误 xff0c 也就是找不到插件 那么解决方法也非常简单 xff0
  • 安装Ubuntu双系统

    制作U盘启动盘 1 电脑插入U盘 xff0c 格式化U盘 2 下载解压好安装包 链接 xff1a https pan baidu com s 1my5JrSz QRPwRxIOdU4JJQ 提取码 xff1a 1234 解压完成打开文件夹

随机推荐