結果
問題 | No.359 門松行列 |
ユーザー | mizzsig |
提出日時 | 2016-04-17 23:32:57 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,272 bytes |
コンパイル時間 | 577 ms |
コンパイル使用メモリ | 64,668 KB |
実行使用メモリ | 10,496 KB |
最終ジャッジ日時 | 2024-10-04 11:01:30 |
合計ジャッジ時間 | 5,697 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
10,496 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | WA | - |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | TLE | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
ソースコード
#include <cmath> #include <cstdio> #include <vector> #include <iostream> using namespace std; typedef long long ll; int l; int a[3][3]; int check2(int e){ switch (e){ case 0: case 1: case 2: if (((a[1][e] > a[0][e] && a[1][e] > a[2][e]) || (a[1][e] < a[0][e] && a[1][e] < a[2][e])) && (a[1][e] != a[0][e] && a[1][e] != a[2][e] && a[0][e] != a[2][e])) return 1; break; case 3: case 4: case 5: if (((a[e - 3][1] > a[e - 3][0] && a[e - 3][1] > a[e - 3][2]) || (a[e - 3][1] < a[e - 3][0] && a[e - 3][1] < a[e - 3][2])) && (a[e - 3][1] != a[e - 3][0] && a[e - 3][1] != a[e - 3][2] && a[e - 3][0] != a[e - 3][2])) return 1; break; case 6: if (((a[1][1] > a[0][0] && a[1][1] > a[2][2]) || (a[1][1] < a[0][0] && a[1][1] < a[2][2])) && (a[1][1] != a[0][0] && a[1][1] != a[2][2] && a[0][0] != a[2][2])) return 1; break; case 7: if (((a[1][1] > a[2][0] && a[1][1] > a[0][2]) || (a[1][1] < a[2][0] && a[1][1] < a[2][0])) && (a[1][1] != a[2][0] && a[1][1] != a[0][2] && a[2][0] != a[0][2])) return 1; break; } return 0; } // 門松列ができているかをチェック // num でどの列かを切り替え int check(int kakunin[]){ for (int e = 0; e < 8; e++){ if (kakunin[e] == 0){ continue; } else{ if (check2(e) == 0){ return 0; } } } return 1; } void kakunin_set(int x, int y, int kakunin[]){ kakunin[x + 3]++; kakunin[y]++; if ((x + y) % 2 == 0){ kakunin[6]++; kakunin[7]++; } } int main(){ int t; cin >> t; int count = 0; // 0 になっている場所 int x[2], y[2], pair = 0; // 切る竹の長さ int length = 0; // どの列で見るかのチェック int kakunin[8] = { 0 }; // それぞれのテストケース for (int i = 0; i < t; i++){ //使った値の初期化 for (int j = 0; j < 8; j++) kakunin[j] = 0; pair = 0; count = 0; length = 1; cin >> l; for (int j = 0; j < 3; j++){ for (int k = 0; k < 3; k++){ cin >> a[k][j]; if (a[k][j] == 0){ x[pair] = k; y[pair] = j; kakunin_set(x[pair], y[pair], kakunin); pair++; } } } while (length < l){ a[x[0]][y[0]] = length; a[x[1]][y[1]] = l - length; if (check(kakunin) == 1){ count++; } length++; } cout << count << endl; } return 0; }