题解:CF1906G Grid Game 2

题解:CF1906G Grid Game 2

题目描述

Alice 和 Bob 在一个大小为 \(10^9×10^9\) 的网格图上博弈。

其中上面有 \(n\) 个黑点,分别为 \((x_i​,y_i​)\),其余的点都是白点。

一次操作为选择一个黑点,设其坐标为 \((r,c)\),设 \(t=\min(r,c)\) 则翻转所有 \(r−t+1≤x≤r,c−t+1≤y≤c\) 的点。

现在 Alice 先手进行操作,若一人无法操作则他输了,给定初始局面,问是否先手必胜。

\(1≤n≤2×10^5\)

题解

在所有黑点上放一枚硬币,如果有两枚硬币就抵消掉(两边可以复制决策),这样翻转操作就变成了放硬币操作,写成 SG 函数,也就是说,放在 \((x, y)\) 上的硬币的 SG 函数为:

\[f(x, y)=\text{MEX}(\{f(r, c)|x - \min(x, y) + 1\leq r\leq x, y - \min(x, y)+1\leq c\leq y, (r, c)\neq(x, y)\}) \]

MEX 的集合只有一个数,要么是 0 要么是 1,所以所有的 \(f(x, y)\)\(\in\{0,1\}\)。写成这样的形式:对于 \((x, y)\),令 \(t=\min(x, y)\)

\[\bigoplus_{r=x-t+1}^x\bigoplus_{c=y-t+1}^yf(r, c)=1 \]

到这里可以开始正攻,然后失败,可以发现我们总是想尽可能的将一行 / 一列压缩成 \(O(1)\) 个位置方便计算,但是最后压缩出的位置很丑,而且无法确定的初值会很多,还是会比较难。

到这里不得已去抄了题解,题解做法是,既然发现需要压缩这些位置,那么就尝试去把前缀和造出来,造到最后我们直接设二维前缀和 \(g(x,y)\),如果 \(x>y\),那么它很自然地就会满足 \(g(x, y)=g(x,y-x)\oplus 1\),这个 \(1\) 就是刚才 \(f\) 的定义推得的。那么这个 \(g\) 自然就能辗转相除。从 \(g\) 还原 \(f\) 也是直接 \(g(x,y)\oplus g(x,y-1)\oplus g(x-1,y)\oplus g(x-1,y-1)=f(x,y)\) 就好了。时间复杂度 \(O(n\log V)\)

代码

#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr, ##__VA_ARGS__)
#else
#define endl "\n"
#define debug(...) void(0)
#endif
using LL = long long;
int g(int x, int y) {
  if (!x) return 1;
  return g(y % x, x) ^ (y / x);
}
int main() {
#ifndef LOCAL
  cin.tie(nullptr)->sync_with_stdio(false);
#endif
  int n, ans = 0;
  cin >> n;
  while (n--) {
    int x, y;
    cin >> x >> y;
    ans ^= g(x, y) ^ g(x - 1, y) ^ g(x, y - 1) ^ g(x - 1, y - 1);
  }
  cout << (ans & 1 ? "FIRST" : "SECOND") << endl;
  return 0;
}

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1
1 0 0 0 0 0 1 1 0 1 0 1 1 0 0 0 0 0 1 1
1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 1 1 1
1 1 1 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 0 1
1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 1 1
1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0
1 0 0 1 0 1 1 0 1 0 1 0 0 0 1 1 1 1 0 0
1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0
1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0
1 1 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1
1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 0 0 1 0 0
1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 0 0 0
1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0
1 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 0 1 1 0
1 0 1 0 0 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1
1 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0
1 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0
posted @ 2025-05-26 19:41  caijianhong  阅读(45)  评论(0)    收藏  举报