結果
問題 | No.1421 国勢調査 (Hard) |
ユーザー |
![]() |
提出日時 | 2021-03-06 03:40:13 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,258 bytes |
コンパイル時間 | 706 ms |
コンパイル使用メモリ | 83,904 KB |
実行使用メモリ | 7,776 KB |
最終ジャッジ日時 | 2024-10-07 17:59:34 |
合計ジャッジ時間 | 5,831 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 21 WA * 9 |
ソースコード
#include <iostream>#include <cstdio>#include <cmath>#include <ctime>#include <cstdlib>#include <cassert>#include <vector>#include <list>#include <stack>#include <queue>#include <deque>#include <map>#include <set>#include <bitset>#include <string>#include <algorithm>#include <utility>#include <complex>#define rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++)#define reps(x, s) for(llint (x) = 0; (x) < (llint)(s).size(); (x)++)#define chmin(x, y) (x) = min((x), (y))#define chmax(x, y) (x) = max((x), (y))#define sz(x) ((ll)(x).size())#define ceil(x, y) (((x)+(y)-1) / (y))#define all(x) (x).begin(),(x).end()#define outl(...) dump_func(__VA_ARGS__)#define inf 1e18#define mod 1000000007using namespace std;typedef long long llint;typedef long long ll;typedef pair<ll, ll> P;bool exceed(ll x, ll y, ll m){return x >= m / y + 1;}template<typename T>ostream& operator << (ostream& os, vector<T>& vec) {for(int i = 0; i<vec.size(); i++) {os << vec[i] << (i + 1 == vec.size() ? "" : " ");}return os;}template<typename T, typename U>ostream& operator << (ostream& os, pair<T, U>& pair_var) {os << "(" << pair_var.first << ", " << pair_var.second << ")";return os;}template<typename T, typename U>ostream& operator << (ostream& os, map<T, U>& map_var) {for(typename map<T, U>::iterator itr = map_var.begin(); itr != map_var.end(); itr++) {os << "(" << itr->first << ", " << itr->second << ")";itr++;if(itr != map_var.end()) os << ",";itr--;}return os;}template<typename T>ostream& operator << (ostream& os, set<T>& set_var) {for(typename set<T>::iterator itr = set_var.begin(); itr != set_var.end(); itr++) {os << *itr;++itr;if(itr != set_var.end()) os << " ";itr--;}return os;}void dump_func() {cout << endl;}template <class Head, class... Tail>void dump_func(Head &&head, Tail &&... tail) {cout << head;if(sizeof...(Tail) > 0) cout << " ";dump_func(std::move(tail)...);}void swapRows(int mat[10005][55], int i, int j, int w){for(int k = 1; k <= w+1; k++) swap(mat[i][k], mat[j][k]);}void GaussianElimination(int mat[10005][55], int w, int h){int r = 1;for(int i = 1; i <= w && r <= h; i++){if(mat[i][r] == 0){int max_val = 0, max_j;for(int j = r+1; j <= h; j++){if(mat[j][i] > max_val){max_val = mat[j][i];max_j = j;}}if(max_val == 0) goto end;swapRows(mat, r, max_j, w);}for(int j = 1; j <= h; j++){if(j == r) continue;if(mat[j][i] == 0) continue;for(int k = 1; k <= w+1; k++){mat[j][k] ^= mat[r][k];}}r++;end:;}}ll n, m;ll ans[55];int a[10005][55], b[10005];int mat[10005][55];int main(void){ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;rep(i, 1, m){ll k, x;cin >> k;rep(j, 1, k) cin >> x, a[i][x] = 1;cin >> b[i];}rep(i, 0, 29){rep(j, 1, m){rep(k, 1, n) mat[j][k] = a[j][k];mat[j][n+1] = (b[j]>>i)&1;}GaussianElimination(mat, n, m);rep(j, 1, m){ll p = n+1;rep(k, 1, n) if(mat[j][k]) chmin(p, k);if(p == n+1){if(mat[j][n+1]){outl(-1);return 0;}continue;}ans[p] |= mat[j][n+1]<<i;}}rep(i, 1, n) outl(ans[i]);return 0;}