Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) 个人题解(A - D)
1443A. Kids Seating

题意: 给你一个整数n,现在你需要从编号 \(1\) ~ $4 ⋅ n \(中选出\)n\(个编号使得这些编号之间\)g c d ≠ 1$ ,不能整除。
看了半天,发现只要满足 \(起始点在 2 · n + 2,然后依次增加2\) 即可
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

题意:
现在城市中有一些炸弹,但我们的拆弹专家知道如何引爆炸弹而不影响建筑(引爆时会使整个连续区间的炸弹都爆炸)。引爆一次炸弹需要 \(a\) 花费,而添加一个炸弹需要 \(b\) 花费。问怎么做才能使消费最小
思路:
由于任何地雷的激活都会炸毁整个地雷段,因此您可以立即用一系列地雷段替换输入字符串。 现在,我们有两个操作。 我们可以用硬币删除任何分段,或者将两个相邻的分段 \([l1,r1],[l2,r2] (r1 <l2)\)变成 \(b⋅(l2-r1)\)的分段。 即,可以以 \(2⋅a\) 或 \(a +b⋅(l2-r1)\) 的代价删除两个片段。 这意味着您需要在 \(b⋅(l2-r1)≤a\) 时合并两个段。 所以想到取到最小花费只需要遍历所有相邻的路段并检查这种情况。
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

题意:
你需要点\(n\)个不同的菜,你有两种方式可以选择,一种是点外卖,花费\(a_i\) 时间,一种是自己拿,花费\(b_i\) 时间。你需要在最少的时间中弄完这\(n\) 个菜。
思路:
因为选择点外卖一直是需要人在家的(等价于点外卖一定是最大时间),那么根据贪心思想只需要统计自己拿的时间总和(此时需要自定义排序)
// 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,我们已经解决了长度为\(i-1\)的前缀的问题。 然后,对于元素a [i],必须满足\(a [i]≤a[i-1]\)和\(v [i] -a [i]≥b[i-1]\)。 重写第二个不等式并与第一个不等式组合,我们得到\(a [i]≤min(a [i-1],v [i] -b [i-1])\)。 显然,通过构造最好采用\(a [i] = min(a [i-1],v [i] -b [i-1])\)。
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表示没怎么看懂题,待补状态。。。
Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) 个人题解(A - D)的更多相关文章
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)【ABCDF】
比赛链接:https://codeforces.com/contest/1443 A. Kids Seating 题意 构造一个大小为 \(n\) 的数组使得任意两个数既不互质也不相互整除,要求所有数 ...
- Codeforces Round #681 (Div. 1, based on VK Cup 2019-2020 - Final) B. Identify the Operations (模拟,双向链表)
题意:给你一组不重复的序列\(a\),每次可以选择一个数删除它左边或右边的一个数,并将选择的数append到数组\(b\)中,现在给你数组\(b\),问有多少种方案数得到\(b\). 题解:我们可以记 ...
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) D. Extreme Subtraction (贪心)
题意:有一个长度为\(n\)的序列,可以任意取\(k(1\le k\le n)\),对序列前\(k\)项或者后\(k\)减\(1\),可以进行任意次操作,问是否可以使所有元素都变成\(0\). 题解: ...
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma (贪心,结构体排序)
题意:你要买\(n\)份午饭,你可以选择自己去买,或者叫外卖,每份午饭\(i\)自己去买需要消耗时间\(b_i\),叫外卖需要\(a_i\),外卖可以同时送,自己只能买完一份后回家再去买下一份,问最少 ...
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) B. Saving the City (贪心,模拟)
题意:给你一个\(01\)串,需要将所有的\(1\)给炸掉,每次炸都可以将一整个\(1\)的联通块炸掉,每炸一次消耗\(a\),可以将\(0\)转化为\(1\),消耗\(b\),问将所有\(1\)都炸 ...
- Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) A. Kids Seating (规律)
题意:给你一个正整数\(n\),在\([1,4n]\)中找出\(n\)个数,使得这\(n\)个数中的任意两个数不互质且不能两两整除. 题解:这题我是找的规律,从\(4n\)开始,往前取\(n\)个偶数 ...
- Codeforces Round 623(Div. 2,based on VK Cup 2019-2020 - Elimination Round,Engine)D. Recommendations
VK news recommendation system daily selects interesting publications of one of n disjoint categories ...
- Codeforces Round #623 (Div. 1, based on VK Cup 2019-2020 - Elimination Round, Engine)A(模拟,并查集)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; pair<]; bool cmp( ...
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine)
A. Dead Pixel(思路) 思路 题意:给我们一个m*n的表格,又给了我们表格中的一个点a,其坐标为(x, y),问在这个表格中选择一个不包括改点a的最大面积的矩形,输出这个最大面积 分析:很 ...
- Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
C. Restoring Permutation time limit per test1 second memory limit per test256 megabytes inputstandar ...
随机推荐
- GPTs 初体验 - 1 分钟就能创建一个自己的 ChatGPT?
就在 11.10 号早上,ChatGPT 已经偷摸的把GPTs功能,开放给所有尊贵的 Plus 用户了. 随着这波的功能开放,界面也是改了不少.点击左侧的 Explore 或者左下角的用户处,就可以直 ...
- 关于微信小程序中如何实现数据可视化-echarts动态渲染
移动端设备中,难免会涉及到数据的可视化展示.数据统计等等,本篇主要讲解原生微信小程序中嵌入echarts并进行动态渲染,实现数据可视化功能. 基础使用 首先在GitHub上下载echarts包 地址: ...
- 链表K个节点的组内逆序调整问题
链表K个节点的组内逆序调整问题 作者:Grey 原文地址: 博客园:链表K个节点的组内逆序调整问题 CSDN:链表K个节点的组内逆序调整问题 题目描述 LeetCode 25. Reverse Nod ...
- 【scipy 基础】--统计分布
scipy.stats子模块包含大量的概率分布.汇总和频率统计.相关函数和统计测试.掩蔽统计.核密度估计.准蒙特卡罗功能等等. 这个子模块可以帮助我们描述和分析数据,进行假设检验和拟合统计模型等. 1 ...
- cookie和session的区别?一文讲透
一.问题 cookie和session的区别? 二.回答 1.总结如下- cookie: - cookie存储于客户端本地,即浏览器缓存 - cookie存储着sessionId,作为后台sessio ...
- SQLBI_精通DAX课程笔记_02_数据类型
SQLBI_精通DAX课程笔记_02_数据类型 PowerBi 和 Analysis Services 在数据加载环节,无论数据源是什么类型,都会自动将数据转化为DAX可用的数据类型集. 以下链接为微 ...
- .net下优秀的MQTT框架MQTTnet使用方法,物联网通讯必备
MQTTnet 是一个高性能的MQTT类库,支持.NET Core和.NET Framework. MQTTnet 原理: MQTTnet 是一个用于.NET的高性能MQTT类库,实现了MQTT协议的 ...
- erp——绩效考核系统——软件需求规格说明书
绩效考核系统--软件需求规格说明书 引言 1.1编写目的:此文件需求说明书主要是为了开发人员能了解系统之间的关系,使用者能明白系统的使用方法,另外,可以供一些学习的小白进行参考,提供需要的人参考软件需 ...
- 轻量型 Web SCADA 组态软件 TopLink
图扑物联 发布了一款工业物联网边缘侧应用场景的轻量型 Web SCADA 组态软件 Iotopo TopLink.该产品采用 B/S 架构,提供 Web 管理界面,软件包大小仅 23MB,无需安装客户 ...
- C#设计模式之享元模式(Flyweight)
using System; using System.Collections; public class Client { public static void Main(string[] args) ...