結果
問題 | No.803 Very Limited Xor Subset |
ユーザー |
|
提出日時 | 2019-03-19 11:09:36 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 24 ms / 2,000 ms |
コード長 | 2,491 bytes |
コンパイル時間 | 1,730 ms |
コンパイル使用メモリ | 175,784 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-13 14:49:11 |
合計ジャッジ時間 | 3,663 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 43 |
ソースコード
#define _USE_MATH_DEFINES#include "bits/stdc++.h"using namespace std;#define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i))#define rep(i,j) FOR(i,0,j)#define each(x,y) for(auto &(x):(y))#define mp make_pair#define MT make_tuple#define all(x) (x).begin(),(x).end()#define debug(x) cout<<#x<<": "<<(x)<<endl#define smax(x,y) (x)=max((x),(y))#define smin(x,y) (x)=min((x),(y))#define MEM(x,y) memset((x),(y),sizeof (x))#define sz(x) (int)(x).size()#define RT returnusing ll = long long;using pii = pair<int, int>;using vi = vector<int>;using vll = vector<ll>;void reducedRowEchelonFormXor(vector<vector<bool>> &A) {const int n = (int)A.size();const int m = (int)A[0].size();int row = 0;for (int c = 0; c < m; ++c) {int pivot = -1;for (int r = row; r < n; ++r) {if (A[r][c]) {pivot = r;break;}}if (pivot == -1) {continue;}swap(A[pivot], A[row]);for (int r = 0; r < n; ++r) {if (r != row && A[r][c]) {for (int i = 0; i < m; ++i) {A[r][i] = A[r][i] != A[row][i];}}}row++;}}void solve() {const int R = 30;const int MOD = (int)1e9 + 7;int N, M, X;cin >> N >> M >> X;vector<vector<bool>> A(N, vector<bool>(R + M));vector<bool> v(R + M), u = v;rep(i, N) {int a;cin >> a;rep(j, R) {A[i][j] = a >> j & 1;}}rep(i, R) {v[i] = X >> i & 1;}rep(i, M) {int t, l, r;cin >> t >> l >> r;--l;FOR(row, l, r) {A[row][R + i] = true;}v[R + i] = t;}reducedRowEchelonFormXor(A);int leeway = 0;rep(i, N) {int col = -1;rep(j, R + M) {if (A[i][j]) {col = j;break;}}if (col == -1) {leeway = N - i;break;}if (v[col]) {FOR(j, col, R + M) {u[j] = u[j] != A[i][j];}}}if (u != v) {cout << 0 << endl;} else {ll ans = 1;rep(i, leeway)(ans *= 2) %= MOD;cout << ans << endl;}}int main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(15);solve();return 0;}