Codeforces 题面传送门 & 洛谷题面传送门

一道脑筋急转弯的结论题。

首先我们考虑对于某个特定的金币数 \(m\),有哪些 \(n\) 满足条件。考虑最 naive 的情况,\(m=0\):显然 \(n=1,2\) 满足条件,而对于 \(n=3\),由于总共只有 \(0\) 个金币,因此第 \(2,3\) 个人会且只会拿到 \(0\) 个金币,而即便第一个人被杀,问题转化为 \(n=2\) 的情形,另外两个人也会活下来,没有做到“严格更优”,因此另外两人必然投反对,第一个人也就被杀了。对于 \(n=4\),第一个人自己肯定赞成,由于第一个人被杀后问题转化为 \(n=3\) 的情形,此时第二个人必然被杀,因此第二个人也会赞成,后两人由于不管怎么样都是 \(0\) 个金币且一定活下来,因此自然投反对,\(2\) 对 \(2\),因此第一个人会活下来。同理 \(n=5\),后四个人不管怎么样都是 \(0\) 个金币,都投反对,因此第一个人会被杀;\(n=6\),第一个人赞成,由于第一个人被杀后,第二个人就变为 \(n=5\) 的分配金币情况,不论怎样都被杀,因此第二个人也会赞成,后四个人自然反对,\(2\) 对 \(4\),人数没过半,第一个人被杀;\(n=7\),第一、二、三个人肯定都会赞成,否则轮到它们分的时分别是 \(n=5,6\) 的情况,这两种情况都会导致分金币的人被杀,但另外四个人还剩会反对,\(3\) 对 \(4\),人还是不够,被杀;\(n=8\),类似地有前四个人投赞成,后四个人投反对,刚好 \(4\) 对 \(4\)。

相信推到这里,聪明的你已经发现,对于 \(m=0\) 的情况,符合条件的 \(n\) 可以写成 \(2^k\) 的形式 \((k\in\mathbb{Z})\)

接下来考虑推广到更一般的情况,容易注意到一件事情,那就是当 \(n=2m\) 时一定符合条件,此时第一个人只用把金币分给与它所在位置奇偶性相同的人即可,这个不难归纳证明。同理 \(n=2m+1\) 时候也符合条件,类似地分给第 \(3,5,7,\cdots,2k+1,\cdots,2m+1(k\in[1,m])\) 即可。我们考虑从 \(n=2m+2\) 开始推起,显然当 \(n=2m+2\) 时第一个人只用拿金币贿赂第 \(3,5,7,\cdots,2m+1\) 个人即可,因为如果第一个人被杀死了,轮到第二个人分金币,他肯定会分给第 \(4,6,8,\cdots,2m+2\) 个人,这些人就一分钱都莫得了,加上自己,刚好 \(m+1\) 个人。但是 \(n=2m+3\) 时就没那么走运了,因为 \(m\) 个金币最多贿赂 \(m\) 个人,即便你把这些金币分给第 \(5,7,9,\cdots,2m+3\) 个人,让他们赞成你,又如何?第二个人必然反对——因为如果第一个人被杀死了,轮到他分,不管怎样都是 \(0\) 个金币,没有做到“严格更优”,同理第三个人也会反对,第 \(4,6,8,\cdots,2m+2\) 个人也就更会反对了——如果第二个人分他们本可以拿的更多的,因此总共 \(m+1\) 人赞成,第一个人被杀。对于 \(n=2m+4\) 的情况,首先第一个人会赞成,其次第二个人也会赞成,因为如果第一个人被杀问题就变为 \(n=2m+3\),他也就 GG 了,然后你再拿金币贿赂第 \(6,8,\cdots,2m+4\) 个人——因为如果第一个人被杀,第二个人 \(n=2m+3\) 的情况也被杀,就轮到第三个人分金币,那他肯定会分给第 \(5,7,\cdots,2m+3\) 个人,就没有这些人的份了,他们都投赞成,总共 \(m+2\) 个赞成,刚好。\(n=2m+5\),第一个人赞成自己,第二个人反对,因为就算第一个人被杀轮到他分还是 \(0\) 个,第三、四、五个人同理反对,此时再贿赂 \(m\) 个人,最多 \(m+1\) 个赞成,被杀。同理 \(n=2m+6,2m+7\) 也会被杀,而对于 \(n=2m+8\),第一个人显然赞成,第二、三、四个人也赞成,否则轮到他们时他们就被杀了,此时再贿赂 \(m\) 个人,总共 \(m+4\),刚好过半。

相信聪明的读者一定还能发现,对于这种情况,符合条件的 \(n\) 一定等于 \(2^k+2m(k\in\mathbb{Z})\),因此对于 \(n\) 是奇数的情况答案显然是 \(\dfrac{n-1}{2}\),否则记 \(k\) 为满足 \(2^k\le n\) 的最大的整数,答案就是 \(\dfrac{n-2^k}{2}\)。

真·这篇题解码了我 1.2k,尽管只是个 *2300

Codeforces 690A2 - Collective Mindsets (medium)的更多相关文章

  1. Collective Mindsets (medium) (逻辑题)

    B - Collective Mindsets (medium) Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I6 ...

  2. Collective Mindsets (easy)(逻辑题)

    Collective Mindsets (easy) Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d &am ...

  3. CodeForces 690C2 Brain Network (medium)(树上DP)

    题意:给定一棵树中,让你计算它的直径,也就是两点间的最大距离. 析:就是一个树上DP,用两次BFS或都一次DFS就可以搞定.但两次的时间是一样的. 代码如下: #include<bits/std ...

  4. Maximum Control (medium) Codeforces - 958B2

    https://codeforces.com/contest/958/problem/B2 题解:https://www.cnblogs.com/Cool-Angel/p/8862649.html u ...

  5. Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化

    https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...

  6. codeforces 690D2 D2. The Wall (medium)(组合数学)

    题目链接: D2. The Wall (medium) time limit per test 2 seconds memory limit per test 256 megabytes input ...

  7. codeforces 690C2 C2. Brain Network (medium)(bfs+树的直径)

    题目链接: C2. Brain Network (medium) time limit per test 2 seconds memory limit per test 256 megabytes i ...

  8. 【树形DP】codeforces K. Send the Fool Further! (medium)

    http://codeforces.com/contest/802/problem/K [题意] 给定一棵树,Heidi从根结点0出发沿着边走,每个结点最多经过k次,求这棵树的最大花费是多少(同一条边 ...

  9. 【贪心】codeforces B. Heidi and Library (medium)

    http://codeforces.com/contest/802/problem/B [题意] 有一个图书馆,刚开始没有书,最多可容纳k本书:有n天,每天会有人借一本书,当天归还:如果图书馆有这个本 ...

随机推荐

  1. Java:volatile笔记

    Java:volatile笔记 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. volatile 和 JMM 内存模型的可见性 JUC 下的三个包 java ...

  2. NOIP模拟84(多校17)

    T1 宝藏 解题思路 考场上一眼出 \(nlog^2\) 做法,然后没看见是 1s 3e5 的数据,我竟然以为自己切了?? 考完之后尝试着把二分改为指针的移动,然后就过了??或许是数据水吧,感觉自己的 ...

  3. FastAPI 学习之路(三十四)数据库多表操作

    之前我们分享的是基于单个的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计. class User(Base): __tablename__ = "users&q ...

  4. Vue项目搭建常用的配置文件,request.js和vue.config.js

    request.js用来请求数据,封装的代码如下: import axios from 'axios' const request = axios.create({ timeout: 5000 }) ...

  5. 记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程

    编译运行整个QGIS耗时耗力,由于本人比较愚钝,来来回回花了大概两个星期最终编译成功,记录一下整个过程,一方面备忘,另一方面可能也给别人一点借鉴. 1.准备工作 参考了许多网上的教程,李民录大神的&l ...

  6. uvm_subscriber

    subscriber是消费,用户的意思 uvm_subscriber主要作为coverage的收集方式之一 uvm_subscriber的代码非常简单,继承于uvm_component,再加上一个an ...

  7. python解释器的下载与安装

    python解释器 1. 什么是python解释器 用一种能让电脑听的懂得语言,使得电脑可以听从人们的指令去进行工作(翻译官) Python解释器本身也是个程序, 它是解释执行Python代码的,所以 ...

  8. 学习JS的第四天

    一.循环 1.循环嵌套 1.一个循环内包含完整的另一个循环语句. 2.被包含的循环语句叫内循环,包含别的循环的循环语句叫外循环. 3.外循环每执行一次循环,内循环都会完全执行所有循环次数. 4.循环嵌 ...

  9. makefile编译子目录

    make子目录常用方法 一般是 SUB_DIR = lib_src service .PHONY: subdirs $(SUB_DIR) subdirs: $(SUB_DIR) $(SUB_DIR): ...

  10. Part 20 Create custom service in AngularJS

    Whenever the case changes from lower to upper, a single space character should be inserted. This mea ...