题目链接

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\)。

总的来说,可以分为以下三种情况:

  1. \(a[i]\) 是 \(a\) 中最大值且 \(i = mx\_idx\),那么需要放弃选举的人数为 \(0\);
  2. \(a[i]\) 加上其前面的所有候选者的值(包括举棋不定者的值)已为最大值,那么需要放弃选举的人数为 \(i - 1\);
  3. \(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的更多相关文章

  1. CodeForces - 457C:Elections(三分)

    You are running for a governor in a small city in Russia. You ran some polls and did some research, ...

  2. [Codeforces]850E - Random Elections

    FWT裸题,写了下模板 #include<cstdio> #define ll long long #define r register int #define MN (1<< ...

  3. CodeForces - 1020C C - Elections(贪心+枚举)

    题目: 党派竞争投票 有n个人,m个党派,这n个人每个人有一个想要投的党派的编号Pi,如果想要这个人改变他的想法,那么就需要花费Ci元钱. 现在你是编号为1的党派,如果你想要赢(你的票数严格大于其他党 ...

  4. 【Codeforces 1019A】Elections

    [链接] 我是链接,点我呀:) [题意] 每个人都有自己喜欢的队员 但是如果贿赂他们可以让他们更改自己喜欢的队员 问你最少要花多少钱贿赂队员才能让1号队员严格有最多的人喜欢? [题解] 除了1号之外, ...

  5. Codeforces #503 C. Elections(贪心,逆向

    我的参考的博客地址 题目 逆向考虑. 暴力遍历 k(k是1到n/2+1 范围内的),挑出对于每一个k,记对于党派 i,num[ i ]为其票数.num[ i ]小于k-1的就不用改变投票了(这部分是比 ...

  6. codeforces 1020 C Elections(枚举+贪心)

    题意: 有 n个人,m个党派,第i个人开始想把票投给党派pi,而如果想让他改变他的想法需要花费ci元.你现在是党派1,问你最少花多少钱使得你的党派得票数大于其它任意党派. n,m<3000 思路 ...

  7. Codeforces C. Elections(贪心枚举三分)

    题目描述: C. Elections time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. 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 ...

  9. Little Elephant and Elections CodeForces - 258B

    Little Elephant and Elections CodeForces - 258B 题意:给出m,在1-m中先找出一个数x,再在剩下数中找出6个不同的数y1,...,y6,使得y1到y6中 ...

  10. 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 ...

随机推荐

  1. USB Type-C Power Role

    USB Power Role 是指 USB 设备在供电方面所扮演的角色,主要分为供电方(Provider)和受电方(Consumer).在 USB 供电协议中,电源角色的管理尤为重要,尤其是在 USB ...

  2. 105份墨天轮“国产化迁移”干货文档汇总(含TiDB、openGauss、上云等)

    当前国产数据库产品百花齐放,随着政策的推进.技术的迭代以及市场需求的逐步扩大,数据库国产化正在加速进行中,有越来越多的金融.通信.制造.互联网等企业机构以及政府机关单位将业务系统从Oracle.MyS ...

  3. 墨天轮访谈 | 百度云邱学达:GaiaDB如何解决云上场景的业务需求?

    分享嘉宾:邱学达 百度云原生数据库资深技术专家 整理:墨天轮社区 导读 业务上云的大背景对弹性与可靠性的要求越来越高,传统架构的单机数据库或是分片数据库已经很难支撑快速增长的业务,导致单机瓶颈.扩容缩 ...

  4. 默认nginx.conf

    user nginx; worker_processes auto; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid ...

  5. 何为ORM框架?和ADO.NET 对比

    百度:ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中.简单理解为一种框架的格式 . 只 ...

  6. Vue3中的新的内置组件

    在vue2中的内置组件: 动态路由中的 component :作用:动态显示路由的挂载点,使用 is 属性动态显示组件 : keep-alive :作用:使被包裹的组件保留状态,避免被重新渲染 : 路 ...

  7. Nuxt3+PM2集群模式启动及勘误

    起因 之前写过一篇 Nuxt3 的文章,Nuxt3 环境变量配置,用到了 PM2,但是里面的一些配置存在问题,最近有空又验证了一下,这里做一个勘误. 问题 PM2 的启动配置中有一项是exec_mod ...

  8. 云原生周刊: 使用 Kubectl 执行 100 个 Kubernetes 诊断命令 | 2023.10.23

    开源项目推荐 Stern Stern 是一个针对 Kubernetes 的多 pod 和容器日志跟踪工具.可以跟踪 Kubernetes 上的多个 pod 和 pod 中的多个容器.每个结果都用颜色编 ...

  9. 《一篇就够系列》之HTTP详解,覆盖高频面试考点!

    一.写在开头 前几篇博文大概介绍了什么是网络编程,以及网络编程的实战作用,今日起,我们将针对里面涉及到的重要知识点,进行详细的梳理与学习! 在整个WEB编程中,有个应用层的协议是我们无法跳过的,那就是 ...

  10. cn2 lab 笔记

    Ubuntu 18.04 Kafka 先启动kafka自带的zookeeper 在data/kafka_2.13-3.3.1bin目录下执行 ./zookeeper-server-start.sh . ...