Codeforces Round 913 (Div. 3) A~E(F,G更新中)

A.Rook(循环)

题意:

给出一个 8 × 8 8 \times 8 8×8的棋盘和一个棋子(可以任选上下左右四方向移动任意步数),问一次移动可以到达哪些格子。

分析:

使用for循环对棋子所在的行列进行遍历并输出。

代码:

#include <bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 3e5 + 5;void solve() {string s;cin >> s;for (int i = 1; i <= 8; i++) {if (s[1] - '0' != i) {cout << s[0] << i << endl;}}for (int i = 0; i < 8; i++) {if (s[0] - 'a' != i) {cout << (char)(i + 'a') << s[1] << endl;}}
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

B.YetnotherrokenKeoard(模拟)

题意:

给出一个仅包含字母的字符串,其中'B'字符为删去当前字符前的第一个大写字母,'b'字符为删去当前字符前的第一个小写字母。

问:最后剩下的字符串是什么?

分析:

使用结构体存储每个字符,同时记录字符和字符原本所在的下标,并开两个vector分别存储大小写字母,遇到大小写的b且当前对应的vector非空,就删除对应vector最后一个元素。

遍历完字符串后将两个vector中的元素放在一起排序输出即可。

hint:大小写'b'的功能仅为删除元素,不会出现在结果字符串中

代码:

#include <bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 3e5 + 5;struct Node{char c;int pos;bool operator < (const Node &o) const {return pos < o.pos;}
};vector<Node> up, low, ans;void solve() {string s;cin >> s;up.clear();low.clear();ans.clear();for (int i = 0; i < s.size(); i++) {if (s[i] >= 'a' && s[i] <= 'z') {if (s[i] == 'b') {if (!low.empty()) low.pop_back();} else {low.push_back(Node{s[i], i});}} else {if (s[i] == 'B') {if (!up.empty()) up.pop_back();} else {up.push_back(Node{s[i], i});}}}for (int i = 0; i < up.size(); i++) {ans.push_back(up[i]);}for (int i = 0; i < low.size(); i++) {ans.push_back(low[i]);}sort(ans.begin(), ans.end());for (int i = 0; i < ans.size(); i++) {cout << ans[i].c;}cout << endl;
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

C.Removal of Unattractive Pairs(思维)

题意:

给出一个仅包含小写字母的字符串,每次可以选择两个相邻且不同的字符删除,问经过若干次删除后,剩下的字符串的最短长度是多少?

分析:

只需要考虑出现次数最多的字符,如果其他字符加起来的数量还没有该字符的出现次数多,那么一定无法消除所有字符。

共分为以下几种情况:

  • 出现次数最多的字符的数量不大于其他所有字符的数量

    • n为奇数,由于每次只能消除2个字符,那么必然有1个字符会被剩下
    • n为偶数,可以全部删除
  • 出现次数最多的字符的数量大于其他所有字符的数量

    • 此时消耗掉所有其他字符都无法将出现次数最多的字符消除,计算剩余多少个字符即可。

代码:

#include <bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 3e5 + 5;int cnt[30];void solve() {int n;string s;cin >> n >> s;memset(cnt, 0, sizeof (cnt));int maxn = -1;for (int i = 0; i < n; i++) {cnt[s[i] - 'a']++;maxn = max(maxn, cnt[s[i] - 'a']);}if (maxn * 2 <= n) {if (n % 2 == 1) cout << 1 << endl;else cout << 0 << endl;}else cout << n - 2 * (n - maxn) << endl;
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

D.Jumping Through Segments(二分)

题意:

在数轴上有 n n n条线,第 i i i条线段覆盖 l i ∼ r i l_i \sim r_i liri的区域,开始时站在 0 0 0点上,每次可以选择一个 0 ∼ k 0 \sim k 0k之间的数字 x x x,可以向前或向后跳跃 x x x距离。

要求:第 i i i次跳跃的落点需要在第 i i i条线段中。

问: k k k最少是多少才能保证完成所有跳跃?

分析:

可以对 k k k进行二分,每次检查时维护可以跳到的区间的最左端和最右端,然后检查能否落在下一条线段中。如果不能,那么当前 k k k不合法,否则,继续检查,并将区间约束在当前线段中。

代码:

#include <bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 3e5 + 5;int n, l[N], r[N];bool check(int k) {int L = 0, R = 0;for (int i = 1; i <= n; i++) {int jump_l = L - k, jump_r = R + k;if (jump_l > r[i] || jump_r < l[i]) return false;L = max(jump_l, l[i]), R = min(jump_r, r[i]);}return true;
}void solve() {cin >> n;for (int i = 1; i <= n; i++) {cin >> l[i] >> r[i];}int L = 0, R = 1e9, ans = -1;while (L <= R) {int mid = (L + R) / 2;if (check(mid)) {ans = mid;R = mid - 1;} else {L = mid + 1;}}cout << ans << endl;
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

E.Good Triples(思维)

题意:

给出一个非负整数 n n n,问有多少三元组 ( a , b , c ) (a,b,c) (a,b,c)满足 a + b + c = n a + b + c = n a+b+c=n d i g s u m ( a ) + d i g s u m ( b ) + d i g s u m ( c ) = d i g s u m ( n ) digsum(a) + digsum(b) + digsum(c) = digsum(n) digsum(a)+digsum(b)+digsum(c)=digsum(n)

  • d i g s u m ( i ) digsum(i) digsum(i)表示将数字 i i i十进制位上的每一个数字加在一起的结果。

分析:

a + b + c a + b + c a+b+c出现进位时,必有 d i g s u m ( a ) + d i g s u m ( b ) + d i g s u m ( c ) ≠ d i g s u m ( n ) digsum(a) + digsum(b) + digsum(c) \ne digsum(n) digsum(a)+digsum(b)+digsum(c)=digsum(n),因此,将 n n n十进制位上每个数字拆出来,单独考虑每个数字的方案,最后根据乘法原理统计答案即可。

hint:需预处理 i = a + b + c ( 0 ≤ i ≤ 9 ) i = a + b + c(0 \le i \le 9) i=a+b+c(0i9)的方案数。

代码:

#include <bits/stdc++.h>typedef long long LL;
using namespace std;
const int N = 3e5 + 5;LL cnt[15];void solve() {string s;cin >> s;LL ans = 1;for (int i = 0; i < s.size(); i++) {ans *= cnt[s[i] - '0'];}cout << ans << endl;
}int main() {for (int i = 0; i <= 9; i++) {for (int j = 0; i + j <= 9; j++) {for (int k = 0; i + j + k <= 9; k++) {cnt[i + j + k]++;}}}int Case;cin >> Case;while (Case--) {solve();}return 0;
}

F,G

更新中…

学习交流

以下为学习交流QQ群,群号: 546235402,每周题解完成后都会转发到群中,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/253367.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「智慧城市」这一概念科学吗?还是炒作?

智慧城市是一个综合性的概念&#xff0c;它利用信息技术和创新概念&#xff0c;将城市的各个系统和服务集成起来&#xff0c;以提升城市运行效率、优化城市管理和服务&#xff0c;改善市民的生活质量。 具体来说&#xff0c;智慧城市涵盖了许多领域&#xff0c;包括城市规划、建…

数据通信的基础知识

目录 一、物理层的主要功能 二、物理层的特性 三、数据通信的几个术语 四、信道的几个基本概念 1、信道 2、基带信号 &#xff08;1&#xff09;基带调制常用编码方式 1&#xff09;不归零码&#xff08;NRZ&#xff1a;Non-Return to Zero&#xff09; 2&#xff09;…

MATLAB——二维小波的多层重构

%% 学习目标&#xff1a;二维小波的多层重构 %% 案例1 clear all; close all; load woman.mat; Xind2gray(X,map); [C,S]wavedec2(X,3,db4); %二维小波的多层分解 S C(1:38*38)0; %将小波的近似系数设置为0 Ywaverec2(C,S,db4); %二维小波的多层…

MYSQL全语法速查(含示例)

文章目录 1.从简单的查询开始查找所有记录(SELECT *)查找记录中的所有登录名(SELECT)查找登录名为admin的密码(WHERE)查找电话号码非空的记录(IS NOT NULL)查找所在城市为北京或者用户名字是李四的记录(OR)查找所在城市为北京并且用户名字是张三的记录(AND)查找用户名字是李四或…

组件的生命周期

目录​ 1&#xff1a;生命周期和生命周期函数的概念 2&#xff1a;组件创建的过程 3&#xff1a;组件创建阶段beforeCreate&#xff0c;created&#xff0c;beforeMount&#xff0c;mounted生命周期函数。 3.1&#xff1a;beforeCreate方法示例&#xff1a; 3.2&#xff1…

【数据结构】动态规划(Dynamic Programming)

一.动态规划&#xff08;DP&#xff09;的定义&#xff1a; 求解决策过程&#xff08;decision process&#xff09;最优化的数学方法。 将多阶段决策过程转化为一系列单阶段问题&#xff0c;利用各阶段之间的关系&#xff0c;逐个求解。 二.动态规划的基本思想&#xff1a; …

团队git操作流程

项目的开发要求&#xff1a;&#xff08;1&#xff09;项目组厉员代码提交不少于20次 &#xff08;2&#xff09;项目组厉员每天提交不少于20次 &#xff08;3&#xff09;企业项目开发代码的每天的提交一般提交3-5次 &#xff08;4&#xff09;代码仓库的管理 git的基础操作流…

对于多台232modbus仪表低成本通讯的modbus转profinet网关

随着越来越多的仪表设备采用Modbus通信协议&#xff0c;其中又以232 Modbus仪表的应用最为广泛。而为了实现多台232 Modbus仪表低成本通信&#xff0c;Modbus转Profinet网关应运而生。Modbus转Profinet网关不仅能够实现多台仪表之间的数据传输&#xff0c;还能够保证通信的稳定…

【数据结构】——二叉树简答题模板

目录 一、树和二叉树的概念&#xff08;一&#xff09;二叉树的定义和性质&#xff08;二&#xff09;树和二叉树的区别 二、完全二叉树和满二叉树三、二叉树的遍历&#xff08;一&#xff09;由序列确定二叉树&#xff08;二&#xff09;不同遍历序列的关系 四、二叉树的性质&…

计算机操作系统3

1.虚拟机 VM 两类虚拟机的对比&#xff1a; 2.进程 进程的特征&#xff1a; 进程状态的转换&#xff08;五大状态&#xff09; 3.进程控制原语的作用 4.线程 ​​​​​线程的属性 实现方式 5.调度算法的评价指标

OpenCV-python下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

【源码解析】聊聊阻塞队列之BlockingArrayQueue

阻塞队列 阻塞队列&#xff1a;顾名思义 首先它是一个队列&#xff0c;而一个阻塞队列在数据结构中所起的作用大致如下入所示。 当阻塞队列是空时&#xff0c;从队列中获取元素的操作将会被阻塞。当阻塞队列时满的时&#xff0c;往队列里添加元素的操作将会被阻塞。 试图从空的…

全球6G发展大会开幕,为什么我们需要6G

2023全球6G发展大会 由中国IMT-2030&#xff08;6G&#xff09;推进组、中国通信学会、重庆两江新区管理委员会联合主办的2023全球6G发展大会今天在重庆两江新区明月湖成功开幕&#xff0c;开幕式上发布了《6G网络架构展望》《6G无线系统设计原则和典型特征》白皮书。 《6G网络…

有向图的拓扑序列(拓扑排序)

给定一个 n 个点 m 条边的有向图&#xff0c;点的编号是 1 到 n&#xff0c;图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列&#xff0c;如果拓扑序列不存在&#xff0c;则输出 −1。 若一个由图中所有点构成的序列 A 满足&#xff1a;对于图中的每条边 (x,y)&a…

现货白银简单介绍

在贵金属投资领域&#xff0c;现货白银是当前国际上最为流行、交投最为活跃的白银投资方式&#xff0c;其交易市场遍布全球&#xff0c;包括伦敦、苏黎世、纽约、芝加哥及香港等主要市场&#xff0c;是一种以杠杆交易和做市商的形式进行的现货交易。 现货白银可以说是当下交易模…

对String类的深入理解

String类&#xff1a; String类相信大家对这个类并不陌生&#xff0c;这就是我们熟悉的字符串类型&#xff0c;但是我们一开始只知道它是用来定义字符串的&#xff0c;并不知道它的底层原理&#xff0c;这里我们就来简单的分析一下String的底层原理&#xff0c;首先我们来看一下…

Django回顾 - 6 Ajax

【1】Ajax 定义&#xff1a; 异步Javscript和XML 作用&#xff1a; Javascript语言与服务器(django)进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xff09; 同步交互和异步交互&#xff1a; 1、同步交互&…

IO多路复用(新)

1.前景回顾 无论是阻塞IO还是非阻塞IO&#xff0c;用户应用在一阶段都需要调用recvfrom来获取数据&#xff0c;差别在于无数据时的处理方案&#xff1a; 如果调用recvfrom时&#xff0c;恰好内核没有数据&#xff0c;那么阻塞IO会使用户进程阻塞&#xff0c;非阻塞IO使CPU进行空…

Python通过 psd-tools 解析 PSD 文件

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com PSD&#xff08;Photoshop Document&#xff09;是Adobe Photoshop软件中使用的图像文件格式&#xff0c;包含图层、通道、蒙版等信息。在Python中&#xff0c;我们可以使用 psd-tools 库来解析和处理PSD文件。本…

180天Java从入门到就业-Day04-01Java程序流程控制介绍、Java分支结构if语句

1.程序流程控制介绍 1.1 流程控制结构介绍 流程控制语句是用来控制程序中各语句执行顺序的语句,可以将语句组合成完成一定功能的逻辑模块。 一个程序会包含三种流程控制结构:顺序结构、分支结构、循环结构 顺序结构在没有使用程序流程控制语句(if-else语句、switch-case语…