結果
問題 | No.1056 2D Lamps |
ユーザー | Ryuhei Mori |
提出日時 | 2020-05-20 20:25:56 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 160 ms / 3,000 ms |
コード長 | 1,330 bytes |
コンパイル時間 | 829 ms |
コンパイル使用メモリ | 68,864 KB |
実行使用メモリ | 13,084 KB |
最終ジャッジ日時 | 2024-10-01 23:42:51 |
合計ジャッジ時間 | 3,431 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 154 ms
13,040 KB |
testcase_04 | AC | 150 ms
13,084 KB |
testcase_05 | AC | 151 ms
12,956 KB |
testcase_06 | AC | 160 ms
12,952 KB |
testcase_07 | AC | 157 ms
12,960 KB |
testcase_08 | AC | 155 ms
12,960 KB |
testcase_09 | AC | 53 ms
12,956 KB |
testcase_10 | AC | 85 ms
12,824 KB |
testcase_11 | AC | 150 ms
12,960 KB |
testcase_12 | AC | 150 ms
12,956 KB |
testcase_13 | AC | 2 ms
5,248 KB |
testcase_14 | AC | 11 ms
5,248 KB |
testcase_15 | AC | 7 ms
5,248 KB |
testcase_16 | AC | 6 ms
5,248 KB |
ソースコード
#include <cstdio> #include <bitset> #include <vector> using u64 = unsigned long long int; using vec = std::bitset<40000>; using bvec = std::pair<vec, int>; int n, m; std::vector<bvec> basis; void strip(vec& x){ for(auto const &b: basis) if(x.test(b.second)) x ^= b.first; } void add_to_basis(vec& x){ strip(x); if(x.any()) basis.emplace_back(x, x._Find_first()); } int main(){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ vec x, y; for(int j = 0; j < n; j++){ x.set(n * i + j); y.set(n * j + i); } add_to_basis(x); add_to_basis(y); } for(int i = 0; i < 2*n-1; i++){ vec x, y; for(int j = std::max(0, i-n+1); j <= std::min(i, n-1); j++){ x.set(n * j + i-j); } for(int j = std::max(0, n-1-i); j <= std::min(2*n-2-i, n-1); j++){ y.set(n * j + i+j-n+1); } add_to_basis(x); add_to_basis(y); } std::vector<vec> q; for(int i = 0; i < m; i++){ vec x; for(int j = 0; j < n; j++){ for(int k = 0; k < n; k++){ char c; do { c = getchar(); } while(c != '.' && c != '#'); if(c == '#') x.set(n * j + k); } } strip(x); q.push_back(x); } for(int i = 0; i < m-1; i++){ for(int j = i+1; j < m; j++){ printf("%d", q[i] == q[j]); } puts(""); } return 0; }