結果
問題 | No.803 Very Limited Xor Subset |
ユーザー |
![]() |
提出日時 | 2019-03-17 22:24:48 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,893 bytes |
コンパイル時間 | 1,372 ms |
コンパイル使用メモリ | 164,240 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-08 00:14:00 |
合計ジャッジ時間 | 2,252 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 43 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef pair<int, int> pii;typedef long long ll;typedef vector<int> vi;#define pb push_back#define eb emplace_back#define mp make_pair#define fi first#define se second#define rep(i,n) rep2(i,0,n)#define rep2(i,m,n) for(int i=m;i<(n);i++)#define ALL(c) (c).begin(),(c).end()#define dump(x) cout << #x << " = " << (x) << endlconstexpr ll TEN(int n) { return (n == 0) ? 1 : 10 * TEN(n-1); }template<class T, class U>ostream& operator<<(ostream& os, const pair<T, U>& p) {os<<"("<<p.first<<","<<p.second<<")";return os;}template<class T>ostream& operator<<(ostream& os, const vector<T>& v) {os<<"{";rep(i, v.size()) {if (i) os<<",";os<<v[i];}os<<"}";return os;}const ll MOD = 1000000007;typedef vector<vi> mat;int get_rank(mat &A) //mod 2{const int n = A.size(), m = A[0].size();int r = 0;for (int i = 0; r < n && i < m; ++i) {int pivot = r;for (int j = r+1; j < n; ++j) {if (A[j][i]) {pivot = j;break;}}swap(A[pivot], A[r]);if (A[r][i] == 0) continue;for (int j = r+1; j < n; ++j) {if (A[j][i]) {for (int k = i; k < m; ++k) {A[j][k] ^= A[r][k];}}}++r;}return r;}int main() {int N, M, X;cin >> N >> M >> X;mat m(M + 30, vi(N + 1, 0));vi a(N);rep(i, N) cin >> a[i];for (int i = 0; i < 30; ++i) {rep(j, N) {m[i][j] = (a[j] >> i) & 1;}m[i][N] = (X >> i) & 1;}rep(i, M) {int t, l, r;cin >> t >> l >> r;--l; --r;for (int k = l; k <= r; ++k) {m[i+30][k] = 1;}m[i+30][N] = t;}mat m2(M + 30, vi(N));rep(i, m2.size()) {rep(j, m2[i].size()) {m2[i][j] = m[i][j];}}int r = get_rank(m2);get_rank(m);if (r > N || m[r][N] != 0) {puts("0");} else {ll ans = 1;rep(i, N-r) {ans = ans * 2 % MOD;}cout << ans << endl;}return 0;}