zoukankan      html  css  js  c++  java
  • Codeforces 1161C(博弈)

    自己的一点想法

    • 举几个例子后发现是谁先手痒痒把某一堆掏空了那他就GG了,因此要尽量让对方不得不掏空某堆。
    • 用最简单的举例后发现:1 1 1 1 1 1,扔给谁谁完蛋;1 1 1 1 1 2,一样的,肯定得动1的部分;1 1 1 1 2 2,还是败;1 1 1 2 2 2,这个就不一样了,这是胜局面,因为可以不必动1,而且将败局面1 1 1 1 1 1扔给对方。至此可以对要使用的策略有模糊的认知。
    • 考虑更常规的:1 2 3 4 5 6,怎么丢给对方差局面?抓2 3 4,使其变成1 1 1 1 5 6,会发现这和1 1 1 1 2 2其实是一样的结局;10 10 20 20 30 30,如果根据之前的认知直观感受,我们抓20 20 30的,变成10 10 10 10 10 30扔给对手,这个情况和1 1 1 1 1 3一样吗?一样。因为对手必须得动最小的那一堆,他这次虽然没有归0,比如变成10 10 10 9 9 29(最后一个随意辣),但我方此时就9 9 9 9 9 29,所以就是赢的。
    • 非要较真,就不拿20 20 30的,就要拿10 10 30呢……比如变成9 9 20 20 30 29,那对方就可以下黑手了,将其变成9 9 9 9 9 30,你输了。
    • 综上,其实这个博弈的结果一开始就是定好了的,如果与最小的不同的数量小于n / 2,则先手败,否则先手胜。
    int n, a[55];
    
    int main() {
    	cin >> n;
    	rep(i, 0, n - 1)	cin >> a[i];
    	sort(a, a + n);
    	int dif = 0;
    	rep(i, 1, n - 1)
    		if (a[i] != a[0])
    			dif++;
    	if (dif < n / 2)	puts("Bob");
    	else	puts("Alice");
    	return 0;
    }
    
  • 相关阅读:
    传智播客itcastbbs(二)
    传智播客itcastbbs(三)
    传智播客itcastbbs(一)(图文)
    传智播客itcastbbs(四)
    传智播客itcastbbs(六)
    双语美文:我想! 我做! 我得到!
    java邮件开发详解
    JDK_Tomcat_MyEclipse配置
    醋泡大蒜有什么功效
    优盘量产
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10961630.html
Copyright © 2011-2022 走看看