Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) 个人题解(A - D)
1443A. Kids Seating
题意: 给你一个整数n,现在你需要从编号
看了半天,发现只要满足
void solve() {
cin >> n;
for (int i = 2 * n + 2; i <= 4 * n; i += 2) cout << i << " ";
cout << endl;
}
for _ in range(int(input())):
n = int(input())
print(*[2*i+2*n+2 for i in range(n)])
1443B. Saving the City
题意:
现在城市中有一些炸弹,但我们的拆弹专家知道如何引爆炸弹而不影响建筑(引爆时会使整个连续区间的炸弹都爆炸)。引爆一次炸弹需要
思路:
由于任何地雷的激活都会炸毁整个地雷段,因此您可以立即用一系列地雷段替换输入字符串。 现在,我们有两个操作。 我们可以用硬币删除任何分段,或者将两个相邻的分段
void solve() {
int a, b; cin >> a >> b;
string s; cin >> s;
int i = 0, len = s.length();
vector<pair<int, int>> v;
while (i < len) {
while (i < len && s[i] == '0') i++;
int j = i;
while (j < len && s[j] == '1') j++;
if (i < len) v.push_back({i, j});
i = j;
}
if (v.size() == 0)
printf("0\n");
else {
int ans = a;
for (int i = 1; i < v.size(); i++) {
ans += min((v[i].first - v[i - 1].second) * b, a);
}
printf("%d\n", ans);
}
}
1443C. The Delivery Dilemma
题意:
你需要点
思路:
因为选择点外卖一直是需要人在家的(等价于点外卖一定是最大时间),那么根据贪心思想只需要统计自己拿的时间总和(此时需要自定义排序)
// Author : RioTian
// Time : 20/11/03
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;
struct node {
int x, y;
} a[maxn];
bool cmp(node a, node b) { return a.x < b.x; }
ll _, n;
void solve() {
cin >> n;
for (int i = 1; i <= n; ++i) cin >> a[i].x;
for (int i = 1; i <= n; ++i) cin >> a[i].y;
sort(a + 1, a + 1 + n, cmp);
int now = n, sum = 0;
while (now >= 1) {
if (a[now].x > sum + a[now].y) {
sum += a[now].y;
now--;
} else
break;
}
cout << max(a[now].x, sum) << '\n';
}
int main() {
// freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> _;
while (_--) solve();
}
1443D. Extreme Subtraction
思路:(来自比赛提示)
问题看起来像是-检查是否有递增和递减的数组,它们在元素上的总和等于给定的数组。
这个问题可以贪婪地解决。 让我们最大化递减数组的每个元素(我们称此数组为a,递增数组为b)。 假设初始数组为v,我们已经解决了长度为
void solve() {
int n;
cin >> n;
vector<int> arr(n), last(n);
int rem = 0;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int l = arr[0], r = 0;
for (int i = 1; i < n; i++) {
if (r > arr[i]) {
cout << "NO\n";
return;
}
if (l + r < arr[i]) {
r = arr[i] - l;
} else {
l = arr[i] - r;
}
}
cout << "YES\n";
}
E、F表示没怎么看懂题,待补状态。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战