結果
| 問題 |
No.359 門松行列
|
| コンテスト | |
| ユーザー |
mizzsig
|
| 提出日時 | 2016-04-17 23:32:57 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 7 TLE * 1 -- * 5 |
ソースコード
#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;
}
mizzsig