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 ...
随机推荐
- Vite2 如何设置打包后文件名
vite.config.js build: { rollupOptions: { output: { entryFileNames: `assets/[name].${timestamp}.js`, ...
- ShardingSphere系列(一)——ShardingSphere-JDBC初体验
Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品 ...
- ARMv8中non-shareable inner-shareable outer-shareable属性
如果将block的内存属性配置成Non-cacheable,那么数据就不会被缓存到cache,那么所有observer看到的内存是一致的,也就说此时也相当于Outer Shareable. 其实官方文 ...
- kmemleak 和kasan 的区别
kmemleak 和kasan 都是 Linux 内核中的一些工具和特性,用于帮助进行内存错误检测和修复.然而,它们之间有一些区别: 功能:kmemleak 用于检测内核中未释放的内存泄漏,它可以跟踪 ...
- Linux内核虚拟内存管理之匿名映射缺页异常分析
今天我们就来讨论下这种缺页异常,让大家彻底理解它.注:本文使用linux-5.0内核源代码.文章分为以下几节内容: 匿名映射缺页异常的触发情况 0页是什么?为什么使用0页? 源代码分析 3.1 触发条 ...
- 2021年3月国产数据库排行榜:OceanBase勇夺亚军 神舟挺进20强!
1 新春排行 2021年3月榜单新鲜出炉,同2月相比,本月榜单中十强产品还是原来的面孔,其中3款产品取得了新的名次,榜单座次调整超过半数.前三甲仍然是TiDB.OceanBase.达梦. 冠军:TiD ...
- ServiceMesh 3:路由控制(图文总结)
★ ServiceMesh系列 1 Istio部署 1.1 连接测试机 进入测试机服务器... 1.2 安装Istio 1.2.1 通过官方网站下载Istio # 下载最新版本的Istio $ cur ...
- Maven的安装部署(不踩雷版)
在idea中配置maven需注意maven版本和idea版本相匹配.本人使用idea版本为2020.3,jdk1.8,maven3.6.3可以与之相匹配. 一.下载maven maven下载官网地址: ...
- 思科 ISE 3.4 发布新增功能概览
思科 ISE 3.4 发布,新增功能概览 目录 Active Directory 首选 DC 选择 保留使用设置 本地化 ISE 安装 FQDN 到 SGT 映射 思科 ISE 和 TrustSe ...
- OpenFeign简单使用
OpenFeign入门 什么是 OpenFeign? OpenFeign是一个远程访问的组件,用于两个微服务之间互相访问的中间件 OpenFeign使用步骤 1.添加OpenFeign的依赖 < ...