人,只有自己站起来,这个世界才能属于他。|

园龄:粉丝:关注:

题解:CF690A2 Collective Mindsets (medium)

CF690A2 解题报告

前言

眼前一黑思维题(确信)。

做完估计都能当心理学专家了。

思路分析

感觉没有什么太好的切入点……

可能可以从小到大依次分析?

那么展现一下各位海盗的内心活动。

为了方便表述,把海盗从 n1 排序,从 n1 提出方案。和题面中相反,请读者注意区分。

长文预警。

n=1

死不了。

答案为 0

n=2

投赞成票,也死不了。

答案为 0

n=3

如果 3 号死了,那么金币会被 2 号拿走,1 号拿不到。

所以只要给 1 号一枚金币,他就会投赞成票。

答案为 1

n=4

如果 4 号没有金币,并且 4 号死了,那么 3 号也得死,因为 3 号至少要一枚金币才能存活。

所以如果 4 号没有金币,那么 3 号会投赞成票保命。

答案为 0

n=5

如果 5 号死了,那么 4 号会拿走所有金币,3 号拿不到。所以只要给 3 号一枚金币,他就会投赞成票。

如果 4 号拿到金币,他会给 2 号一枚金币,所以 2 号和 4 号是一伙的。

如果 5 号死了,1 号也拿不到金币,所以只要给 1 号一枚金币,他也会投赞成票。

答案为 2

n=6

如果 6 号手里有一枚金币,并且 6 号死了,那么 5 号也得死,所以 5 号会投赞成票保命。

如果 5 号死了,4 号可以拿走金币,3 号拿不到,所以只要给 3 号一枚金币,他就会投赞成票。

答案为 1

n=7

n=5 相似。

答案为 3

n=8

好玩的来了。

如果 8 号手里没有金币,并且 8 号死了,那么 5 号,6 号,7 号都得死,因为他们手里的金币不够。

所以这 3 个人都会投赞成票保命。

答案为 0

n=9

n=7 相似。

答案为 4

n=10

如果 10 号手里没有金币,那么 9 号会投赞成票保命。

但是没有用,因为 8 号可以活下来,而其他海盗因为死不了,所以开始杀人,所以 10 号没有金币必死。

如果 10 号手里有一枚金币,那么 8 号就不淡定了,因为此时 6 号因为有一枚金币可以活,他不会再支持 8 号,所以 8 号为了保命也会和 9 号一起投赞成票。

这样,7号,8号,9号都会投赞成票。

因为 6 号会拿走金币,5 号拿不到。所以只要给 5 号一枚金币,他就会投赞成票。

答案为 1

n=11

n=9 相似。

答案为 5

n=12

如果没有或者有一枚金币,12 号都会死,读者可以自己验证。

如果有两枚金币,10 号会失去 8 号的支持,所以 10 号,11 号都会投赞成票保命。

然后如果 12 号死了,8 号会拿到全部金币,所以只要分别给 6 号,7 号一枚金币,他们都会投赞成票。

答案为 2

n=13

n=11 相似。

答案为 6

n=14

答案为 4,读者可以自行验证。

n=15

n=13 相似。

答案为 7

n=16

好玩的又来了。

如果 16 号没有金币,那么 9 号,10 号,11 号,12 号,13 号,14 号,15 号都会投赞成票保命。

答案为 0

总结

应该分析的差不多了。

发现当 n 是奇数时,因为当前人死了不会有人陪葬,所以他们不得不给 n12 个拿不到金币的人一人一枚金币,来换取他们的赞成票。

n 是偶数时,并不是金币越多越好,有时候金币少会导致别人陪葬,从而获得这些人的保命票。

这样的人的数量变化是有周期规律的。

k2kn 的极大值,那么答案为 n2k2

代码实现

想得多了,写的就少。


#include<bits/stdc++.h>
using namespace std;
int n,cnt;
int main(){
	cin>>n;
	if(n&1) cout<<(n-1)/2;
	else{
		while((1<<(cnt+1))<=n) cnt++;
		cout<<(n-(1<<cnt))/2;
	}
	return 0;
}

后记

心理学题。

本文作者:Kenma

本文链接:https://www.cnblogs.com/Kenma/p/18689771

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _Kenma  阅读(2)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起