codeforces 1978 D. Elections
题目链接
https://codeforces.com/problemset/problem/1978/D
题意
对于每个测试用例,共有 \(n\) 个人,每个人的号码分别是 \(1,2,...,n\),每个人的粉丝数量是 \(a_i\),他们的粉丝都会为他们投票。有c人举棋不定,他们会将票投给号码最小的人。你可以让任意数量的人退出选举,然后他们的粉丝会变为举棋不定者。问:想让第 \(i\) 人赢得选举,最少需要让几个人退出选举?若有相同票数的,号码较小者获胜
题解
突破点:只要\(a[i]\)不是最大值,你前面的全部候选者都必然退出选举
当有人退出选举时,变为举棋不定者的必定会投给当前剩下的候选者中号码最小者。因此,在全部人均不放弃选举的条件下,若第 \(i\) 个候选者不是全部值中的最大值且是最大值中号码最小的,必定无法获得胜利,若已经是最大值且是最大值中号码最小的,直接可以获得胜利。
在第 \(i\) 个候选者无法获取胜利的情况下,想要让举棋不定者为他投票,唯一的办法是让全部号码比他小的人均放弃选举,从而使得第 \(i\) 个候选者成为剩余的候选者中号码最小的,进而得到全部的举棋不定者的投票。若得到全部举棋不定者的投票后,仍无法成为全部候选者中值最大者,那么只需要让值最大者也放弃选举即可。
举个例子:
\(1\)
\(5\) \(1\)
\(3\) \(1\) \(2\) \(5\) \(5\)
\(1\) \(1\) \(2\) \(0\) \(4\)
在全部人均不放弃选举的情况下,\(c\) 为举棋不定者必定是为第 \(1\) 位候选者投票,原因是其号码最小。所以五名候选者可以视为:
\(4\) \(1\) \(2\) \(5\) \(5\)
在没人放弃选举的情况下,值最大者为 \(mx = 5\),下标为 \(mx\_idx = 4\)。
对于第 \(1\) 个候选者,值不为最大值,其下标满足为全部候选者中号码最小,那么只需要让值最大者放弃选举即可使其获胜,因此需要放弃选举的人数为 \(1\);
对于第 \(2\) 个候选者,值不为最大值,其前面的人放弃选举,他便可成为值最大者且是值最大者中号码最小的,因此需要放弃选举的人数是 \(1\);
对于第 \(3\) 个候选者,值不为最大值,其前面的人放弃选举,他便可成为值最大者且是值最大者中号码最小的,因此需要放弃选举的人数是 \(2\);
对于第 \(4\) 个候选者,值为最大值且是值最大者中号码最小的,因此需要放弃选举的人数是 \(0\);
对于第 \(5\) 个候选者,值为最大值,但是号码不是值最大者中最小的,其前面的人放弃选举,他便可成为值最大者且是值最大者中号码最小的,因此需要放弃选举的人数是 \(4\)。
总的来说,可以分为以下三种情况:
- \(a[i]\) 是 \(a\) 中最大值且 \(i = mx\_idx\),那么需要放弃选举的人数为 \(0\);
- \(a[i]\) 加上其前面的所有候选者的值(包括举棋不定者的值)已为最大值,那么需要放弃选举的人数为 \(i - 1\);
- \(a[i]\) 加上其前面的所有候选者的值(包括举棋不定者的值)仍无法成为最大值,那么需要放弃选举的人数为 \(i\)。
参考代码
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
typedef long long ll;
constexpr int N = 2e5 + 7;
int T, n, c, mx_idx;
int a[N];
void solve() {
cin >> n >> c;
for (int i = 0; i < n; ++ i) cin >> a[i];
a[0] += c;
mx_idx = 0;
for (int i = 0; i < n; ++ i) if (a[i] > a[mx_idx]) mx_idx = i;
ll sum = 0;
int &mx = a[mx_idx];
for (int i = 0; i < n; ++ i) {
if (a[i] > mx || a[i] == mx && i <= mx_idx) {
cout << "0 ";
} else if (sum + a[i] >= mx) {
cout << i << ' ';
} else {
cout << (i + 1) << ' ';
}
sum += a[i];
}
cout << '\n';
}
int main() {
IOS
cin >> T;
while (T --) solve();
return 0;
}
codeforces 1978 D. Elections的更多相关文章
- CodeForces - 457C:Elections(三分)
You are running for a governor in a small city in Russia. You ran some polls and did some research, ...
- [Codeforces]850E - Random Elections
FWT裸题,写了下模板 #include<cstdio> #define ll long long #define r register int #define MN (1<< ...
- CodeForces - 1020C C - Elections(贪心+枚举)
题目: 党派竞争投票 有n个人,m个党派,这n个人每个人有一个想要投的党派的编号Pi,如果想要这个人改变他的想法,那么就需要花费Ci元钱. 现在你是编号为1的党派,如果你想要赢(你的票数严格大于其他党 ...
- 【Codeforces 1019A】Elections
[链接] 我是链接,点我呀:) [题意] 每个人都有自己喜欢的队员 但是如果贿赂他们可以让他们更改自己喜欢的队员 问你最少要花多少钱贿赂队员才能让1号队员严格有最多的人喜欢? [题解] 除了1号之外, ...
- Codeforces #503 C. Elections(贪心,逆向
我的参考的博客地址 题目 逆向考虑. 暴力遍历 k(k是1到n/2+1 范围内的),挑出对于每一个k,记对于党派 i,num[ i ]为其票数.num[ i ]小于k-1的就不用改变投票了(这部分是比 ...
- codeforces 1020 C Elections(枚举+贪心)
题意: 有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元.你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派. n,m<3000 思路 ...
- Codeforces C. Elections(贪心枚举三分)
题目描述: C. Elections time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp+搜索
题目链接: http://codeforces.com/problemset/problem/258/B B. Little Elephant and Elections time limit per ...
- Little Elephant and Elections CodeForces - 258B
Little Elephant and Elections CodeForces - 258B 题意:给出m,在1-m中先找出一个数x,再在剩下数中找出6个不同的数y1,...,y6,使得y1到y6中 ...
- Codeforces Round #503 (by SIS, Div. 2) C. Elections (暴力+贪心)
[题目描述] Elections are coming. You know the number of voters and the number of parties — n and m respe ...
随机推荐
- I found that CTH has no RP when i tried to reduce his RP
- MQ核心作用异步&削峰&解耦使用场景详解
说在前面 在如今的高并发互联网应用中,如何确保系统在巨大的流量冲击下还能稳稳当当运转,是每个技术团队都会遇到的挑战.说到这,消息队列(MQ) 就是背后的"大功臣"了. 无论是异步处 ...
- 使用c++ onnxruntime构建项目出现的bug
bug1:The given version [11] is not supported, only version 1 to 7 is supported in this build. 应该是加载了 ...
- python:将文件从一个目录移动到另一个目录。附:nnUnet使用
在使用nn-Unet做BraTS2019数据集预测时,预测文件分别生成了三类文件:.pkl .npz .nii.gz,我们需要的是.nii.gz文件.所以需要进行文件移动. # coding:ut ...
- ORM底层逻辑
1 数据库必然是只认识Sql语句 2 ORM的底层必然是ADO.NET 3 ORM也可以说是ADO的一种封装 ORM: 1 通过实体生成Sql语句-大量的反射 2 对应映射关系
- KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南
作者:运维有术 前言 知识点 定级:入门级 KubeKey 如何升级 KubeSphere 补丁版本 KubeKey 如何升级 Kubernetes 补丁版本 KubeSphere 和 Kuberne ...
- 在 KubeSphere 中使用 APISIX Ingress 网关接入自定义监控
KubeSphere 3.2.0 发布了!为项目网关增配了整套监控及管理页面,同时引入了集群网关来提供集群层面全局的 Ingress 网关能力.当然,我们还是可以部署使用第三方 Ingress Con ...
- TCP-UDP-Socket调试工具以及使用教程(亲测好用!)
前言 TCP-UDP老程序都不陌生吧,面试常问.所以在网络编程与网络应用开发的过程中,调试是一个至关重要的环节,它帮助开发者确保数据能够准确无误地在不同节点之间传输.尤其当涉及到TCP/IP.UDP等 ...
- SpreadJS 在数据填充时的公式填充方案
需求介绍 很多用户使用了 SpreadJS 的数据填报功能.大致用法为:设计模板,填充数据源.在这个过程中,可能会出现模板中设置了公式,而在数据源填充时,公式没有携带下来的问题. 比如我们定义一个模板 ...
- 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现五
一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...