上海计算机学会 12 月月赛 丙组题解
涉及知识点:数学、字符串、模拟、裴蜀定理、宽度优先搜索、动态规划
比赛链接:https://iai.sh.cn/contest/58
第一题:T1数砖数
标签:数学
题意:给定一种 2 2 2x 2 2 2的瓷砖,样式为
##
.#
用瓷砖,从平面左上角出发,将整个平面铺满。形如:
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
################
.#.#.#.#.#.#.#.#
给定 n n n行 m m m列的区域,求这块区域中 # \# #的数目。( 1 < = n , m < = 10000 1<=n,m<=10000 1<=n,m<=10000)
题解:考虑从整块区域中删掉 . . .的数目。观察发现偶数行、奇数列才有 . . .,自己手玩几组数据能够得到 . . .的数目是 ( n / 2 ) ∗ ( ( m + 1 ) / 2 ) (n/2)*((m+1)/2) (n/2)∗((m+1)/2)。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
cout << n * m - (n / 2) * ((m + 1) / 2);
return 0;
}
第二题:T2移动复位
标签:字符串、模拟
题意:给定一个二维平面上的顶点,然后进行一系列指令操作,指令操作以字符串的形式给出:
R R R 表示该点沿 X X X 轴坐标正方向移动了一个单位
L L L 表示该点沿 X X X 轴坐标负方向移动了一个单位
U U U 表示该点沿 Y Y Y 轴坐标正方向移动了一个单位
D D D 表示该点沿 Y Y Y 轴坐标负方向移动了一个单位
求这些指令执行完之后,至少再增加多少条指令能让这个点返回起点(原来的位置)。
题解:每次都是上下左右移动一个位置坐标,假设原来起点在原点( 0 , 0 0,0 0,0),最少指令数,即求当前坐标( x , y x,y x,y)与原点的曼哈顿距离: ∣ x ∣ + ∣ y ∣ |x|+|y| ∣x∣+∣y∣。
我这边用了 m a p map map去统计了各个移动方向指令的数量,然后东西和南北方向分别做抵消,求绝对值。
曼哈顿距离:两点在南北⽅向上的距离加上在东西⽅向上的距离。
代码:
#include <bits/stdc++.h>
using namespace std;
map<char, int> m;
int main() {
string s;
cin >> s;
for (int i = 0; i < s.size(); i++) {
m[s[i]]++;
}
cout << abs(m['L'] - m['R']) + abs(m['U'] - m['D']) << endl;
return 0;
}
第三题:T3数轴旅行
标签:裴蜀定理
题意:初始位置在 x = 0 x=0 x=0,要去 x = d x=d x=d的位置,给定 n n n个整数 a 1 , a 2 , a 3 . . . , a n a_1,a_2,a_3...,a_n a1,a2,a3...,an,表示每次可以往左移动 a i a_i ai个单位或者往右移动 a i a_i

文章详细解析了上海计算机学会12月月赛丙组的四个题目,涉及数学、字符串操作、模拟移动、裴蜀定理和动态规划等技术,包括计算瓷砖覆盖、移动指令操作、数轴旅行及特定字符串修改等问题的解法。
最低0.47元/天 解锁文章
2823

被折叠的 条评论
为什么被折叠?



