AT1999 [AGC002E] Candy Piles

https://www.luogu.com.cn/problem/AT1999

考虑将 a a a从大到小排序

每次操作相当于是删掉最左边的一列,或最下面的一行

然后转换成从(0,0)开始,每次向上或向右走一格走到边界就输了

把SG换书的标打出来大概是这样
在这里插入图片描述

然后直接找左下角为原点的最大的正方形即可

code:

#include<bits/stdc++.h>
using namespace std;
int cmp(int x, int y) {
    return x > y;
}
int n, a[1000050];
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
    sort(a + 1, a + 1 + n, cmp);
    for(int i = 1; i <= n; i ++) if(i + 1 > a[i + 1]) {
        int j = 0;
        while(a[i + j + 1] == i) j ++;
        if((j & 1) || (a[i] - i & 1)) printf("First");
        else printf("Second");
        return 0; 
    }
    return 0;
}
posted @ 2021-10-31 17:22  lahlah  阅读(43)  评论(0编辑  收藏  举报