zoukankan      html  css  js  c++  java
  • 洛谷1288 取数游戏II

    原题链接

    因为保证有(0)权边,所以整个游戏实际上就是两条链。
    很容易发现当先手距离(0)权边有奇数条边,那么必胜。
    策略为:每次都将边上权值取光,逼迫后手向(0)权边靠拢。若此时后手不取光边权,那么先手只需把后手没有取光的边取光,即把硬币移回去就能让后手五路可走;若后手也取光边权,那么先手只需继续取光边权即可,后手必定会到达(0)权边的起点,无路可走。
    反之,若先手距离(0)边权有偶数条边,那么必输。
    因为无论先手怎么走,都会使得后手距离(0)权边有奇数条边,即后手有必胜策略,所以先手必输。
    注意原图是环,所以需判断下两条路径。

    #include<cstdio>
    using namespace std;
    inline int re()
    {
    	int x = 0;
    	char c = getchar();
    	bool p = 0;
    	for (; c < '0' || c > '9'; c = getchar())
    		p |= c == '-';
    	for (; c >= '0' && c <= '9'; c = getchar())
    		x = x * 10 + c - '0';
    	return p ? -x : x;
    }
    inline int minn(int x, int y)
    {
    	return x < y ? x : y;
    }
    inline int maxn(int x, int y)
    {
    	return x > y ? x : y;
    }
    int main()
    {
    	int i, mi = 1e9, ma = 0, n, x;
    	n = re();
    	for (i = 1; i <= n; i++)
    	{
    		x = re();
    		if (!x)
    		{
    			ma = maxn(ma, i);
    			mi = minn(mi, i);
    		}
    	}
    	if ((mi - 1) & 1 || (n - ma) & 1)
    		printf("YES");
    	else
    		printf("NO");
    	return 0;
    }
    
  • 相关阅读:
    BZOJ-2431: [HAOI2009]逆序对数列 (傻逼递推)
    BZOJ3695 滑行
    BZOJ3689 异或之
    BZOJ3696 化合物
    BZOJ1393 [Ceoi2008]knights
    BZOJ2280 [Poi2011]Plot
    BZOJ1570 [JSOI2008]Blue Mary的旅行
    BZOJ2751 [HAOI2012]容易题(easy)
    BZOJ2818 Gcd
    BZOJ2426 [HAOI2010]工厂选址
  • 原文地址:https://www.cnblogs.com/Iowa-Battleship/p/9855996.html
Copyright © 2011-2022 走看看