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 ...
随机推荐
- 一步解决Cannot resolve symbol 'WebServlet'(@WebServlet注解标红)
右键项目名(javaweb01)->Open Module Settings Modules->Dependencies->点击Export上面的,添加Tomcat即可
- .NET开源的处理分布式事务的解决方案
前言 在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战.今天给大家推荐一个.NET开源的处理分布式事务的解决方案基于 .NET St ...
- Eclipse 安装 ABAP 插件报错 Microsoft Visual C++ 2013 (x64) 快速解决
去官网下载Microsoft Visual C++ 2013 (x64) 安装 Download Visual C++ Redistributable Packages for Visual St ...
- 🔥🔥Java开发者的Python快速实战指南:实用工具之PDF转DOCX文档(可视化界面)
首先,大家对Python语法的了解已经基本完成,现在我们需要开始进行各种练习.我为大家准备了一些练习题目,比如之前的向量数据库等,这些题目可以参考第三方的SDK来进行操作,文档也是比较完善的.这个过程 ...
- 基于DotNetty实现自动发布 - 自动检测代码变化
前言 很抱歉没有实现上一篇的目标:一键发布,因为工作量超出了预期,本次只实现了 Git 代码变化检测 已完成的功能 解决方案的项目发现与配置 首次发布需要手动处理 自动检测代码变化并解析出待发布的文件 ...
- The second day learning summary
1.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来 ...
- 华企盾DSC发送白名单提示“解密发送失败”(被中转服务器判定为垃圾邮箱)
解决方法:用DebugView监控,发现含有550错误,说明中转服务器被判定为垃圾邮箱,换一个中转邮箱或者设置为无中转发送 还有一种可能:邮箱设置了收到邮箱后自动删除 DebugView中显示上图 ...
- cp {,bak}用法(转载)
cp filename{,bak} cp filename{,.bak} 这个命令是用来把filename备份成filename.bak的 等同于命令 cp filename filename.bak ...
- Liquid 常用语法记录
一.什么是 Liquid Liquid 是一款专为特定需求而打造的模板引擎. Liquid 中有两种类型的标记:Output 和 Tag. Output 通常用来显示文本 {{ 两个花括号 }} Ta ...
- 2023-09-07:用go语言编写。塔子哥最近在处理一些字符串相关的任务 他喜欢 R 字符,因为在某些任务中,这个字符通常表示“正确”的结果 另一方面,他不喜欢 B 字符,因为在某些任务中,这个字符
2023-09-07:用go语言编写.塔子哥最近在处理一些字符串相关的任务 他喜欢 R 字符,因为在某些任务中,这个字符通常表示"正确"的结果 另一方面,他不喜欢 B 字符,因为在 ...