传送门:LINK
前言:
今天和队友打这场,2h过了4道题就开始罚坐了。
因为对内没有人精通高斯消元,更没人会高斯消元+bitset优化,所以这道关键题没人做出来。
所需知识:
1,模2加法等价于异或。
2,高斯消元
3,bitset的运用
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 998244353;
ll ksm(ll a, ll b) {
ll kase = 1;
while (b) {
if (b & 1)
kase = kase * a%mod;
a = a * a%mod;
b >>= 1;
}
return kase;
}
bitset<202>b[202];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<vector<int>>A(n + 1, vector<int>(n + 1)), B(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> A[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> B[i][j];
ll ans = 1;
function<ll()>calc = [&]()
{
int ans = 0;
int st = 1;
for (int i = 1; i <= n; st++, i++) {
bool fff = 0;
int r = 0;
for (int j = st; j <= n; j++)
if (b[j][i] == 1) {
fff = 1;
r = j;
break;
}
if (!fff) {
st--;
ans++;
continue;
}
swap(b[st], b[r]);
for (int j = 1; j <= n; j++) {
if (st == j)continue;
if (b[j][i])
b[j] = b[j] ^ b[st];
}
}
return ksm(2, ans);
};
for (int l = 1; l <= n; l++){
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++)
b[i][j] = A[i][j];
b[i][i] = (A[i][i] != B[i][l]);
}
ll res = calc();
ans = ans * res;
ans %= mod;
}
cout << ans << endl;
return 0;
}