Codeforces Round #619 (Div. 2) A-D
比赛链接:Here
1301A. Three Strings
题意:
给三个相同长的字符串 \(a,b,c\) ,对于每个位置 \(i\) ,你必须做一次操作:交换 \(a_i\) 和 \(c_i\) ,或者交换 \(b_i\) 和 \(c_i\)。问你交换完之后 \(a\) 和 \(b\) 能否一样。
因为每个位置必须交换,所以每个位置只要 \(a_i = c_i\) 或者 \(b_i = c_i\) 即可
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
string a, b, c;
cin >> a >> b >> c;
bool f = 1;
for (int i = 0; f and i < a.size(); ++i) {
if (a[i] == c[i] || b[i] == c[i]) continue;
f = 0;
}
cout << (f ? "YES\n" : "NO\n");
}
}
1301B. Motarack's Birthday
题意:
给一个长为 \(n\) 的整数数组,其中有一些数消失了,用 \(-1\) 代替,其他数大于等于 \(0\),然后叫你找一个非负数 \(k\) ,使得用 \(k\) 替代所有 \(-1\) 后,相邻元素的差值的最大值,这个值要最小。
思路:
差值最大值无非就是,原来就有的数之间的相邻差值最大值,和替换后k与原来就有的数的差值的最大值里求一个 \(\max\) 。前者可以直接求的,后者当 \(k\) 取到 \((m_i+mx)/2\) 时取到最小。\(m_i\) 为与 \(k-1\) 邻的原来有的数的最小值,\(mx\) 为最大值。
const int N = 1e5 + 10;
ll a[N];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
int n; cin >> n;
for (int i = 0; i < n; ++i) cin >> a[i];
ll base = 0;
vector<ll>v;
for (int i = 0; i < n - 1; ++i) {
if (a[i] == -1 and a[i + 1] != -1) v.push_back(a[i + 1]);
else if (a[i] != -1 and a[i + 1] == -1) v.push_back(a[i]);
else if (a[i] != -1 and a[i] != -1) base = max(base, abs(a[i] - a[i + 1]));
}
if (v.empty()) {cout << "0 0\n"; continue;}
sort(v.begin(), v.end());
int k = (v.back() + *v.begin()) / 2;
cout << max(max(v.back() - k, k - v[0]), base) << " " << k << "\n";
}
}
1301C. Ayoub's function
题意:
函数 \(f(s)\) 代表,\(01\) 字符串 \(s\) 中包含至少一个 \(1\) 的子串的数量。问你所有长度为 \(n\) ,其中有 \(m\) 个 \(1\) 的 \(01\) 字符串中。使得 \(f(s)\) 的值最大为多少。
做法:
至少包含一个 \(1\) 的子串的数量 \(=\) 所有子串的数量 \(-\) 只包含\(0\) 的子串的数量。
所以要使得 \(f(s)\) 越大,只包含 \(0\) 的子串的数量要越小越好,于是 \(01\) 字符串中每一段的连续的 \(0\) 的个数应尽可能一样。\(m\) 个 \(1\) ,有 \(n-m\) 个 \(0\) ,被分成 \(m+1\) 段,长度为 \((n-m)/(m+1)+1\) 的连续 \(0\) 的段数为 \((n-m)%(m+1)\) ,长度为 \((n-m)/(m+1)\) 的连续 \(0\) 的段数为 \(m+1-(n-m)%(m+1)\) 。再计算一下可得答案。
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
ll n, m; cin >> n >> m;
ll ans = n * (n + 1) / 2;
ll num = (n - m) / (m + 1);
ll r = (n - m) % (m + 1);
cout << (ans - r * (num + 1) * (num + 2) / 2 - (m + 1 - r) * num * (num + 1) / 2) << "\n";
}
}
1301D. Time to Run
题意:
\(n*m\) 的网格,相邻网格间有两条道路(不同方向)。问你能否不重复的走 \(k\) 条路,可以的话输出路径。按题目要求。

思路:
真就直接走完咯,先左右走,到最后一行只往右,到右下角之后上下走,ok,然后题目要求 \(k\) ,边走边减,到 \(0\) 为止即可。 如果全部都走过了 \(k\) 还有剩就输出 NO.
int n, m, k;
vector<pair<int, string>>v, ans;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m >> k;
for (int i = 0; i < n - 1; ++i) {
if (m != 1) {
v.push_back({m - 1, "R"});
v.push_back({m - 1, "L"});
}
v.push_back({1, "D"});
}
if (m != 1) v.push_back({m - 1, "R"});
for (int i = 0; i < m - 1; ++i) {
if (n != 1) {
v.push_back({n - 1, "U"});
v.push_back({n - 1, "D"});
}
v.push_back({1, "L"});
}
if (n != 1) v.push_back({n - 1, "U"});
for (int i = 0; i < v.size(); ++i) {
if (k >= v[i].first) {
k -= v[i].first;
ans.push_back(v[i]);
} else if (k != 0) {
ans.push_back({k, v[i].second});
k = 0;
}
}
if (k > 0) cout << "NO\n";
else {
cout << "YES\n";
cout << ans.size() << "\n";
for (auto p : ans) cout << p.first << " " << p.second << "\n";
}
}
Codeforces Round #619 (Div. 2) A-D的更多相关文章
- Codeforces Round #619 (Div. 2)E思维+二维RMQ
题:https://codeforces.com/contest/1301/problem/E 题意:给个n*m的图形,q个询问,每次询问问询问区间最大的合法logo的面积是多少 分析:由于logo是 ...
- Codeforces Round #619 (Div. 2) A~D题解
最近网课也开始了,牛客上一堆比赛题目也没补,所以就D题后面的也懒得补了 A.Three String 水题 #include <cstdio> #include <cstring&g ...
- Codeforces Round #619 (Div. 2)D(模拟)
先把一种最长路线记录下来,根据k的大小存到ans中相应的答案再输出 #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using n ...
- Codeforces Round #619 (Div. 2)C(构造,容斥)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; int main(){ ios::syn ...
- Codeforces Round #619 (Div. 2) Ayoub's function
Ayoub thinks that he is a very smart person, so he created a function f(s)f(s) , where ss is a binar ...
- Codeforces Round #619 (Div. 2) B. Motarack's Birthday
Dark is going to attend Motarack's birthday. Dark decided that the gift he is going to give to Motar ...
- Codeforces Round #619 (Div. 2) A. Three Strings
You are given three strings aa , bb and cc of the same length nn . The strings consist of lowercase ...
- Codeforces Round #619 (Div. 2)
A. Three Strings 题意:给三个长度相同的非空字符串abc,依次将c中的每个字符和a或者b中对应位置的字符进行交换,交换必须进行,问能否使得ab相同. 思路:对于每一个位置,如果三个字符 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
随机推荐
- 【VMware vCenter】管理平台出现备份作业状态告警,VAMI后台备份任务未能运行,点击手动备份提示FTP位置不可用等问题的处理过程。
VMware vCenter提供了一个备份/还原功能,以便在当vCenter本身出现故障且无法恢复的情况下,使用该功能可以将出故障的vCenter配置文件还原到一个新的vCenter上,这样就无需再重 ...
- 文心一言 VS 讯飞星火 VS chatgpt (145)-- 算法导论12.1 5题
五.用go语言,因为在基于比较的排序模型中,完成n个元素的排序,其最坏情况下需要 Ω(nlgn) 时间.试证明:任何基于比较的算法从 n 个元素的任意序列中构造一棵二又搜索树,其最坏情况下需要 Ω(n ...
- VM离线安装Centos 8以及配置
一.安装 1.预装准备 1.1. 硬件准备 物理内存:2G以上(这里指系统搭建所需占用空间) 物理外存:20G(这里指系统搭建所需占用空间) 1.2. 环境搭建准备 Window10系统电脑一台.Vm ...
- Go笔记(2)-5种运算符总结
运算符 (1)算术运算符 (2)关系运算符 (3)逻辑运算符 (4)位运算符 (5)赋值运算符
- mybatis数据不匹配问题
错误:数据不匹配的问题 原因:在初始化数据时.创建构造参数时只创建了全参,没有创建口参. 具体原因:因为mybatis框架会调用这个默认构造方法来构造实例对象.即Class类的newInstance方 ...
- 【UniApp】-uni-app-数据传递补充
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-CompositionAPI传递数据 那么了解完了uni-app-CompositionAPI传递数据之后,这篇文章来给大家介绍一下 ...
- Javascript面向对象的程序设计 —— 自定义类实现继承的6种方法
许多OO语言都支持两种继承方式: 接口继承:只继承方法签名: 实现继承:继承实际的方法.ECMAScript只支持实现继承,实现继承是继承实际的方法,依靠原型链来实现.1.原型链原型链是实现继承的主要 ...
- CMU DLSys 课程笔记 2 - ML Refresher / Softmax Regression
CMU DLSys 课程笔记 2 - ML Refresher / Softmax Regression 本节 Slides | 本节课程视频 这一节课是对机器学习内容的一个复习,以 Softmax ...
- 浅谈树形DP
树形DP是动态规划中最难也最常考的内容.具有DP和图论相结合的特点. 但从本质上来说,树形DP只不过是一种线性DP,只是将它与搜索结合起来了而已. 树形DP的基本步骤 读图 树形DP的题目中,通常会给 ...
- 文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题
四.一次聚会需要邀请多少人,才能让其中 3 人的生日很可能相同? 文心一言: 为了解决这个问题,我们需要先计算出所有可能的生日组合数,然后计算出其中生日相同的组合数. 已知需要邀请的人数为:23人 根 ...