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. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...

  2. Java中的函数式编程(三)lambda表达式

    写在前面 lambda表达式是一个匿名函数.在Java 8中,它和函数式接口一起,共同构建了函数式编程的框架.   lambda表达式乍看像是匿名内部类的一种语法糖,但实际上,它们是两种本质不同的事物 ...

  3. 使用cerebro可视化ElasticSearch集群信息

    使用cerebro可视化ElasticSearch集群信息 一.背景 二.安装步骤 1.下载并解压 2.配置cerebro 3.启动 cerebro 4.启动界面 三.注意事项 四.参考文档 一.背景 ...

  4. 你一定不知道的Unsafe用法

    Unsafe是什么 首先我们说Unsafe类位于rt.jar里面sun.misc包下面,Unsafe翻译过来是不安全的,这倒不是说这个类是不安全的,而是说开发人员使用Unsafe是不安全的,也就是不推 ...

  5. 微服务(五)nacos配置管理

    1 统一配置管理 1.1 nacos中添加配置文件 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要.基本不会变更的一些配置还是保存在微服务本地比较好. 1.2 从微服务拉取配置 微 ...

  6. Luogu P2467 [SDOI2010]地精部落 | 神奇的dp

    题目链接 DP 题目大意:给定一个数n,求1~n这n个整数的所有排列中有多少个波动数列,将这个数量%p后输出. 什么是波动数列呢?顾名思义,就是一个大.一个小.一个大.一个小--或者是一个小.一个大. ...

  7. 攻防世界 Misc 新手练习区 gif Writeup

    攻防世界 Misc 新手练习区 gif Writeup 题目介绍 题目考点 仔细联想 字符转换 Writeup 下载附件并打开 104张黑白图 发现是一堆黑色和白色的图片,按某种规律排列,猜想flag ...

  8. 理解ASP.NET Core - 日志(Logging)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 快速上手 添加日志提供程序 在文章主机(Host)中,讲到Host.CreateDefault ...

  9. 合并代码操作 | git fetch 与 git pull

    前言 首先我们要说简单说git的运行机制.git分为本地仓库和远程仓库,我们一般情况都是写完代码,commit到本地仓库(生成本地仓的commit ID,代表当前提交代码的版本号),然后push到远程 ...

  10. idea查看方法在哪里被调用

    方法一 选中方法名,右键选择Find Usages 方法二 选中方法快捷键ctrl + alt + h查看Hierarchy Callers