結果
| 問題 | No.334 門松ゲーム |
| コンテスト | |
| ユーザー |
izuru_matsuura
|
| 提出日時 | 2016-02-11 21:52:28 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 2,089 bytes |
| 記録 | |
| コンパイル時間 | 2,547 ms |
| コンパイル使用メモリ | 197,904 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-12 02:50:55 |
| 合計ジャッジ時間 | 3,351 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 13 |
ソースコード
import std.stdio;
import std.ascii;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.random;
import std.regex;
import std.typecons;
void main() {
int N; scanf("%d\n", &N);
int[] K = readln.chomp.split(" ").map!(to!int).array;
bool kadomatsu(int a, int b, int c) {
if (a < b && b < c) return false;
if (c < b && b < a) return false;
if (a == b || b == c || c == a) return false;
return true;
}
const int INF = 1001;
bool win(bool[] used) {
for (int i = 0; i < N; i++) {
if (used[i]) continue;
for (int j = i + 1; j < N; j++) {
if (used[j]) continue;
for (int k = j + 1; k < N; k++) {
if (used[k]) continue;
int x = K[i],
y = K[j],
z = K[k];
if (kadomatsu(x, y, z)) {
bool[] n = used.dup;
n[i] = n[j] = n[k] = true;
bool opp = win(n);
if (!opp) {
return true;
}
}
}
}
}
return false;
}
bool solve() {
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
for (int k = j + 1; k < N; k++) {
int x = K[i],
y = K[j],
z = K[k];
if (kadomatsu(x, y, z)) {
auto used = new bool[N];
used[i] = used[j] = used[k] = true;
if (!win(used)) {
writefln("%(%s %)", [i, j, k]);
return true;
}
}
}
}
}
return false;
}
if (!solve()) {
writeln(-1);
}
}
izuru_matsuura