Codeforces 690A2 - Collective Mindsets (medium)
一道脑筋急转弯的结论题。
首先我们考虑对于某个特定的金币数 \(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)的更多相关文章
- Collective Mindsets (medium) (逻辑题)
B - Collective Mindsets (medium) Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I6 ...
- Collective Mindsets (easy)(逻辑题)
Collective Mindsets (easy) Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d &am ...
- CodeForces 690C2 Brain Network (medium)(树上DP)
题意:给定一棵树中,让你计算它的直径,也就是两点间的最大距离. 析:就是一个树上DP,用两次BFS或都一次DFS就可以搞定.但两次的时间是一样的. 代码如下: #include<bits/std ...
- Maximum Control (medium) Codeforces - 958B2
https://codeforces.com/contest/958/problem/B2 题解:https://www.cnblogs.com/Cool-Angel/p/8862649.html u ...
- Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化
https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...
- codeforces 690D2 D2. The Wall (medium)(组合数学)
题目链接: D2. The Wall (medium) time limit per test 2 seconds memory limit per test 256 megabytes input ...
- codeforces 690C2 C2. Brain Network (medium)(bfs+树的直径)
题目链接: C2. Brain Network (medium) time limit per test 2 seconds memory limit per test 256 megabytes i ...
- 【树形DP】codeforces K. Send the Fool Further! (medium)
http://codeforces.com/contest/802/problem/K [题意] 给定一棵树,Heidi从根结点0出发沿着边走,每个结点最多经过k次,求这棵树的最大花费是多少(同一条边 ...
- 【贪心】codeforces B. Heidi and Library (medium)
http://codeforces.com/contest/802/problem/B [题意] 有一个图书馆,刚开始没有书,最多可容纳k本书:有n天,每天会有人借一本书,当天归还:如果图书馆有这个本 ...
随机推荐
- 【Java虚拟机11】线程上下文类加载器
前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...
- Asp.net Core使用EFCore+Linq进行操作
注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考写的比较细致耐性一点看完会有收获的 首先加上必要的引用 using Microsoft.EntityFramework ...
- Noip模拟71 2021.10.7
T1 签到题 结论题,找到规律就会做 规律是每个点的度数$\mod$颜色种数,如果不是$0$则贡献一个答案 1 #include<bits/stdc++.h> 2 #define int ...
- CentOS8 部署 MySQL8
前言 有来项目的数据库在此之前使用的是 Docker 部署的,具体可见文章 Docker 安装 MySQL8 ,服务器是阿里云 2C2G 的ECS轻量服务器,可能是配置问题有时不论查什么都要等很长很长 ...
- 第K个数 牛客网 程序员面试金典 C++ Python
第K个数 牛客网 程序员面试金典 C++ Python 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测 ...
- Python import Queue ImportError: No module named 'Queue'
python3 中引入Queue 会报出这个问题 python3 中这样引入 import queue python2 中这样引入 import Queue 为了兼容 可以这样 import sys ...
- prometheus(6)之常用服务监控
监控常用服务 1.tomcat 2.redis 3.mysql 4.nginx 5.mongodb prometheus监控tomcat tomcat_exporter地址 https://githu ...
- 【java+selenium3】模拟键盘操作 (十二)
一.键盘操作 用代码来模拟键盘的Enter或一系列的组合键,前面使用sendkeys()方法模拟键盘的输入,除此之外还可以模拟键盘组合键输入如下: 整理一些比较常用的键盘操作如下: sendKeys( ...
- 常用的package.json以及React相关
常用的package.json以及React相关 前言 package.json 的简单介绍 简单版的 package.json 必备属性(name & version) name 字段 ve ...
- Linux内核内存检测工具KASAN
KASAN 是 Kernel Address Sanitizer 的缩写,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题.KASAN 集成在 Linux 内核中,随 ...