其他分享
首页 > 其他分享> > Candy Piles

Candy Piles

作者:互联网

显然将 \(a\) 降序排序后,然后依次放到坐标系中,每次操作相当于把 \(x,y\) 轴之一往上或右平移一个单位

考虑构造一种后手必胜的方案

后手可以把路线控制在 \(y = x\) 上,然后走到一个端点,此时轮到先手

设还可以向上走 \(b\),向右走 \(c\)

若 \(b,c\) 均为偶数则后手必胜

考虑证明剩下的均为先手必胜

\(b,c\) 其中之一必为奇数,那么先手往奇数的方向走一个单位,那么另外的方向上的数就变为 \(0\),而该方向的长度减 \(1\) 变为偶数

可以发现变成了后手必胜的局面

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;

int n, a[N];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	sort(a + 1, a + n + 1);
	reverse(a + 1, a + n + 1);
	int x = 1, b = 0, c = 0;
	while (x < n && a[x + 1] >= x + 1)
		x++;
	b = a[x] - x;
	while (a[x + c + 1] == x)
		c++;
	printf("%s\n", (b|c)&1 ? "First" : "Second");
}

标签:Piles,先手,int,奇数,Candy,偶数,必胜,方向
来源: https://www.cnblogs.com/iqx37f/p/14455360.html