上海计算机学会12月月赛 丙组题解

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

上海计算机学会 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值