关于线性基
  • 板块学术版
  • 楼主Lily_White
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/12/2 10:05
  • 上次更新2023/11/5 06:54:51
查看原帖
关于线性基
87696
Lily_White楼主2020/12/2 10:05

我是跟着 Menci 的 博客 学的。写出来的模板如下:

struct LinearBasis {
  int a[65];
  void insert(int t) {
    for (int i = 60; i >= 0; i--) 
      if ((1LL << i) & t) {
        if (a[i] != 0)
          t ^= a[i];
        else {
          for (int j = 0; j < i; j++) if ((1LL << j) & t) t ^= a[j];
          for (int j = i + 1; j <= 60; j++) if ((1LL << i) & a[j]) a[j] ^= t;
          a[i] = t;
          return;
        }
      }
  }
  LL qmax(LL x) {
    LL res = x;
    for (int i = 0; i <= 60; i++) chmax(res, res ^ a[i]);
    return res;
  }
} lb;

但是我看大多数人的写法都没有

for (int j = 0; j < i; j++) if ((1LL << j) & t) t ^= a[j];
for (int j = i + 1; j <= 60; j++) if ((1LL << i) & a[j]) a[j] ^= t;

这两行。

没有这两行,怎么能保证 aa 中只有第 aja_j 的第 jj 位是 11 呢?

2020/12/2 10:05
加载中...