CF Round 920 (Div. 3) 笔记
CF Round 920 (Div. 3) 笔记
前言
关于这个新系列,是我们的老师推荐给我们的。他说,多打 Codeforces 的比赛能增长我们的实战知识,提升我们的实力。我当然是非常相信的,因为老师说能提升
本场比赛难度为
战绩
题目分析
题
题面概括
给定正方形四个点的坐标,正方形的边平行于
赛时思路
既然是一个正方形,那么只要求出一条边的边长
#include <bits/stdc++.h>
using namespace std;
struct node {
int x, y;
}a[5];
int T;
int main() {
cin >> T;
while (T --) {
for (int i = 1; i <= 4; i++)
cin >> a[i].x >> a[i].y;
for (int i = 1; i <= 4; i++) {
for (int j = 1; j < i; j++) {
if (a[j].x == a[i].x) {
cout << abs(a[j].y - a[i].y) * abs(a[j].y - a[i].y) << "\n";
goto nxt;
}
if (a[j].y == a[i].y) {
cout << abs(a[j].x - a[i].x) * abs(a[j].x - a[i].x) << "\n";
goto nxt;
}
}
}
nxt:;
}
return 0;
}
个人总结
考查的是平面几何计算。较为简单,比赛时最好的方法是把图画出来,能更直观地思考。
题
题面概括
有两个字符串
-
将
变为 。 -
将
变为 。 -
将两个不同字符交换位置。
赛时思路
先考虑比较简单的两种修改操作。我们可以想到,一位一位对比,只要不一样,就使用一次修改操作。
接着再考虑交换操作。发现交换操作是将两个位置的字符反转,即
假设将
#include <bits/stdc++.h>
using namespace std;
int T;
int main() {
cin >> T;
while (T --) {
int n;
string b, f;
cin >> n >> b >> f;
int moveTo0 = 0, moveTo1 = 0;
for (int i = 0; i < n; i++) {
if (b[i] != f[i] && b[i] == '0') moveTo1++;
if (b[i] != f[i] && b[i] == '1') moveTo0++;
}
cout << max(moveTo0, moveTo1) << "\n";
}
return 0;
}
个人总结
比较简单的题,对于多种操作,可以先从简单的操作入手。
题
题面概括
手机有
赛时思路
有两种操作,容易想到取消耗较小的一个。第
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int T;
ll m[N];
int main() {
cin >> T;
while (T --) {
ll n, f, a, b;
cin >> n >> f >> a >> b;
for (int i = 1; i <= n; i++)
cin >> m[i];
bool flag = 1;
for (int i = 1; i <= n; i++) {
ll t = m[i] - m[i - 1];
if (t * a <= b) {
f -= t * a;
if (f <= 0) {
cout << "NO\n";
flag = 0;
break;
}
}
else {
f -= b;
if (f <= 0) {
cout << "NO\n";
flag = 0;
break;
}
}
}
if (flag) cout << "YES\n";
}
return 0;
}
题
这道题打比赛之前居然做过。
题面概括
在
赛时思路
容易想到用最值相减,即
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
ll T, n, m, a[N], b[N];
int main() {
cin >> T;
while (T --) {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= m; i++) cin >> b[i];
ll ans = 0;
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + m);
for (int i = 1; i <= n; i++)
ans += max(abs(a[i] - b[n - i + 1]), abs(a[i] - b[m - i + 1]));
cout << ans << "\n";
}
return 0;
}
小结
这次比赛整体不错,感觉打 CF 比赛确实会有进步。继续坚持吧!
再见!
本文作者:Weekoder
本文链接:https://www.cnblogs.com/Weekoder/p/18240256
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步