Codeforces Round #727 (Div. 2) A~D题题解
比赛链接:Here
1539A. Contest Start
让我们找出哪些参与者会干扰参与者i。这些是数字在 \(i+1\) 和 \(i+min(t/x,n)\)之间的参与者。所以第一个最大值 \((0,n−t/x)\) 参与者将获得 \(t/x\) 不满意,下一个参与者将比上一个参与者少获得 \(1\) 个不满意。所以总的答案是 \(max(0,n−(t/x)⋅t/x+min(n−1,t/x−1)⋅min(n,t/x)/2\)。
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int _; for (cin >> _; _--;) {
ll n, x, t;
cin >> n >> x >> t;
ll ans = 0;
if (n > t / x) {
ans = (n - t / x) * (t / x);
t /= x;
ans += t * (t - 1) / 2;
} else ans = n * (n - 1) / 2 ;
cout << ans << "\n";
}
}
1539B. Love Song
伪装成字符串的前缀和
【AC Code】
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, q;
string s;
cin >> n >> q >> s;
vector<int>pre(n + 1);
for (int i = 0; i < n; ++i)
pre[i + 1] = pre[i] + (int)(s[i] - 'a' + 1);
while (q--) {
int l, r;
cin >> l >> r;
cout << pre[r] - pre[l - 1] << "\n";
}
}
1539C. Stable Groups
给定 \(n\) 个数和 \(k,x\) 两个正整数,现有 \(n\) 个分值为 \(a_i\) 的学生,要求排列后相邻两个学生的差的绝对值不大于x,至多能在序列中插入k个任意分值的学生,最少能把原序列加上新的学生后(可不全加或不加)分为几个满足条件的子序列。
一开始觉得可以写反悔贪心(的确也可以),但模拟的过程发现对两个排序以后的相邻数差值再排序的结果即答案。
即按升序补学生
【AC Code】
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
ll n, k, x;
cin >> n >> k >> x;
vector<ll>a(n);
for (ll &x : a)cin >> x;
sort(a.begin(), a.end());
vector<ll>b(n - 1);
for (int i = 0; i < n - 1; ++i)
b[i] = max(0ll, (a[i + 1] - a[i] - 1) / x);
sort(b.begin(), b.end());
ll cnt = n;
for (int i = 0; i < n - 1; ++i) {
if (b[i] <= k) {
k -= b[i];
cnt--;
}
}
cout << cnt << "\n";
}
1539D. PriceFixed
要买 \(n\) 种商品,每种商品要买 \(a_i\) 个,每种商品在购买过 \(b_i\) 件任意商品后可以打五折,每件商品原价为2,最少需要多少钱。
很明显单纯为了打折而去买多的商品至少需要1+1元,和直接买没区别,那就是直接贪心了。
【AC Code】
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n;
cin >> n;
vector<pair<ll, ll>> v(n);
for (int i = 0; i < n; ++i) {
cin >> v[i].second >> v[i].first;
}
sort(v.begin(), v.end());
int il = 0;
int ir = n - 1;
ll have = 0;
ll ans = 0;
while (il <= ir) {
while (il <= ir && v[il].first <= have) {
ans += v[il].second;
have += v[il].second;
v[il].second = 0;
++il;
}
while (ir >= il && v[ir].second == 0)
--ir;
if (il > ir) break;
ll cnt = min(v[il].first - have, v[ir].second);
v[ir].second -= cnt;
have += cnt;
ans += cnt * 2;
}
cout << ans << '\n';
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n; cin >> n;
vector<ll>a(n), b(n);
for (int i = 0; i < n; ++i) {
cin >> a[i] >> b[i];
}
ll total = accumulate(a.begin(), a.end(), 0ll);
ll ans = 2 * total;
vector<ll>order(n);
iota(order.begin(), order.end(), 0); // 生从 0 到 N 的连续整数,即 0、1、2、3、……、N。
sort(order.begin(), order.end(), [&] (int i, int j) {
return b[i] > b[j];
});
ll cnt = total;
for (ll i : order) {
ll tmp = max(0ll, min(cnt - b[i], a[i]));
ans -= tmp;
cnt -= tmp;
}
cout << ans << '\n';
}
Codeforces Round #727 (Div. 2) A~D题题解的更多相关文章
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- Codeforces Round #599 (Div. 2)的简单题题解
难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- Codeforces Round #310 (Div. 2)--A(简单题)
http://codeforces.com/problemset/problem/556/A 题意:给一个01字符串,把所有相邻的0和1去掉,问还剩下几个0和1. 题解:统计所有的0有多少个,1有多少 ...
- Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)
A. Vladik and Courtesy time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...
- Codeforces Round #336 (Div. 2)-608A.水题 608B.前缀和
A题和B题... A. Saitama Destroys Hotel time limit per test 1 second memory limit per test 256 megabyte ...
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
- Codeforces Round #590 (Div. 3)【D题:26棵树状数组维护字符出现次数】
A题 题意:给你 n 个数 , 你需要改变这些数使得这 n 个数的值相等 , 并且要求改变后所有数的和需大于等于原来的所有数字的和 , 然后输出满足题意且改变后最小的数值. AC代码: #includ ...
- Codeforces Round #590 (Div. 3)【D题:维护26棵树状数组【好题】】
A题 题意:给你 n 个数 , 你需要改变这些数使得这 n 个数的值相等 , 并且要求改变后所有数的和需大于等于原来的所有数字的和 , 然后输出满足题意且改变后最小的数值. AC代码: #includ ...
随机推荐
- 实例讲解SpringBoot集成Dubbo的步骤及过程
首先,让我们先了解一下Spring Boot和Dubbo. Spring Boot 是一个开源的 Java Web 框架,它可以帮助开发者快速创建独立的.生产级别的 Spring 应用程序.Sprin ...
- 环形缓冲区 Ring Buffer 的实现
环形缓冲区(Circular Buffer 或 Ring Buffer)是一种数据结构,它在逻辑上形成一个闭环.这种结构非常适用于需要固定大小的缓冲区的情况,如音频处理.网络通信.实时数据传输等.环形 ...
- C++ Qt开发:使用关联容器类
当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念.顺序容器是一种能够按照元素添加的顺序来存储和检索数据的数据结构.它们提供了简单而直观的方式来组织和管理数据,为程序员提供了灵活性和性能的 ...
- [ABC268G] Random Student ID
Problem Statement Takahashi Elementary School has $N$ new students. For $i = 1, 2, \ldots, N$, the n ...
- 聊一聊 .NET高级调试 中必知的符号表
一:背景 1. 讲故事 在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据 ...
- 打造一个极度舒适的Chrome扩展项目开发环境
大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. Chrome 扩展能够提高浏览器的使用体验,通过自定义 UI 界面,监听浏览器事件,改变 Web 页 ...
- pycharm插件离线安装
给不能联网的电脑或者不能访问外网的云桌面安装pycharm插件,需要离线安装 首先在能访问网络的电脑上打开插件主页,如下: 下载插件安装文件
- C++ Qt开发:SqlRelationalTable关联表组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlRela ...
- MD5 or Bcrypt?
MD5 or Bcrypt? 摘要 首先是一个错误的认识观念问题,很多人觉得MD5是一个加密算法.不然,他实则是一种摘要算法,也可以叫哈希函数.他的作用是将目标文本转换成具有相同长度.不可逆的杂凑字符 ...
- 丝丝入扣,毫不违和,AI一键换脸和微调,基于Rope-Ruby,2024最新整合包
AI换脸已经不是什么时新的技术了,从DeepFace到Facesweap,再到Roop.AI换脸技术中出现了一种名为"一键换脸"的方法,它不需要训练模型.这种方法利用了名为&quo ...