投票游戏 vote

投票游戏 vote

题目描述

信奥班的同学总是这么无聊,他们现在喜欢玩一种投票游戏。游戏规则如下,把参与游戏的同学们编号由1到N,
然后他们开始投票,每个人只能投一票,只能是赞成或者反对,投票结果下来后如果赞成人数严格大于反对的
人数,那么编号最小的那位同学便被踢出游戏,剩下的同学继续开始投票,直到投票僵持下来(比如剩两个人
的时候一个人反对一个人赞成就会一直僵持下去),这时候游戏结束。XJ准备了一些小红花,会把他们平均分
给这些剩下的同学。每个同学都想得到最多的小红花,而且不想自己被踢出。给出同学个数N,问最后剩下的同
学个数,假定信奥班的同学都无比机智。

输入

一行,一个整数N

输出

一行,一个整数表示剩下的同学个数。

样例输入

3

样例输出

2

数据范围

30% 1<=n<=50.
100% 1<=n<=5000.

题解:

一道很像海盗分金币的趣味题,我们采取逆推方法。
当只剩2个人时肯定僵持,所以如果有3个人,则定会淘汰一个,如果4个人,因为都不想被淘汰,12号肯定反
对,3,4号定会赞成,则僵持,所以有5,6,7个人时定会淘汰到只剩4个人,依次类推,则如果有n个人,定会只
剩2^log2(n)个人。

源代码:

#include 
using namespace std;
int n, ans;
int main() {
	cin>>n;
	ans=1;
	while(ans*2<=n) {
		ans*=2;
	}
	cout<<ans<<endl;
	return 0;
}

AC

你可能感兴趣的:(投票游戏 vote)