結果
問題 | No.1400 すごろくで世界旅行 |
ユーザー | butsurizuki |
提出日時 | 2021-02-19 22:01:57 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,428 bytes |
コンパイル時間 | 1,020 ms |
コンパイル使用メモリ | 97,440 KB |
実行使用メモリ | 11,648 KB |
最終ジャッジ日時 | 2024-09-16 19:09:01 |
合計ジャッジ時間 | 6,442 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
11,648 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 6 ms
5,376 KB |
testcase_07 | AC | 11 ms
5,376 KB |
testcase_08 | AC | 3 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 4 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 58 ms
5,376 KB |
testcase_13 | TLE | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
ソースコード
//https://ideone.com/8AsuI2 #include <iostream> #include <vector> #include <cstdio> #include <algorithm> #include <functional> #include <ctime> using namespace std; namespace bitmatrix { typedef unsigned long long ull; struct mat { int n, m; vector<vector<ull>> x; mat(int m, int n) : m(m), n(n), x(1+m/8, vector<ull>(1+n/8)) { } bool get(int i, int j) const { return x[i/8][j/8] & (1ull << (8*(i%8)+(j%8))); } void set(int i, int j, int b) { if (b) x[i/8][j/8] |= (1ull << (8*(i%8)+(j%8))); else x[i/8][j/8] &= ~(1ull << (8*(i%8)+(j%8))); } }; ostream &operator<<(ostream &os, const mat &A) { for (int i = 0; i < A.m; ++i) { for (int j = 0; j < A.n; ++j) os << A.get(i, j); os << endl; } return os; } mat eye(int n) { mat I(n, n); for (int i = 0; i < I.x.size(); ++i) I.x[i][i] = 0x8040201008040201; return I; } mat add(mat A, const mat &B) { for (int i = 0; i < A.x.size(); ++i) for (int j = 0; j < A.x[0].size(); ++j) A.x[i][j] |= B.x[i][j]; return A; } ull mul(ull a, ull b) { // C[i][j] |= A[i][k] & B[k][j] const ull u = 0xff, v = 0x101010101010101; ull c = 0; for (;a && b; a >>= 1, b >>= 8) c |= (((a & v) * u) & ((b & u) * v)); return c; } mat mul(mat A, mat B) { mat C(A.n, B.m); for (int i = 0; i < A.x.size(); ++i) for (int k = 0; k < B.x.size(); ++k) for (int j = 0; j < B.x[0].size(); ++j) C.x[i][j] |= mul(A.x[i][k], B.x[k][j]); return C; } mat pow(mat A, long long k) { mat X = eye(A.n); for (; k > 0; k >>= 1) { if (k & 1ll) X = mul(X, A); A = mul(A, A); } return X; } ull transpose(ull a) { ull t = (a ^ (a >> 7)) & 0xaa00aa00aa00aa; a = a ^ t ^ (t << 7); t = (a ^ (a >> 14)) & 0xcccc0000cccc; a = a ^ t ^ (t << 14); t = (a ^ (a >> 28)) & 0xf0f0f0f0; a = a ^ t ^ (t << 28); return a; } mat transpose(mat A) { mat B(A.m, A.n); for (int i = 0; i < A.x.size(); ++i) for (int j = 0; j < A.x[0].size(); ++j) B.x[j][i] = transpose(A.x[i][j]); return B; } } using namespace bitmatrix; int main() { int n; cin >> n; long long t; cin >> t; mat A(n, n); string s; for(int i=0;i<n;i++){ cin >> s; for(int j=0;j<n;j++){ if(s[j]=='0'){A.set(i,j,0);} else{A.set(i,j,1);} } } A=pow(A,t); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(A.get(i,j)==0){puts("No");return 0;} } } puts("Yes"); return 0; }