結果
問題 | No.355 数当てゲーム(2) |
ユーザー | tnakao0123 |
提出日時 | 2016-04-08 15:52:29 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 28 ms / 2,000 ms |
コード長 | 2,145 bytes |
コンパイル時間 | 1,042 ms |
コンパイル使用メモリ | 89,196 KB |
実行使用メモリ | 25,464 KB |
平均クエリ数 | 70.63 |
最終ジャッジ日時 | 2024-07-16 23:36:37 |
合計ジャッジ時間 | 5,174 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 28 ms
25,232 KB |
testcase_01 | AC | 25 ms
25,216 KB |
testcase_02 | AC | 26 ms
24,976 KB |
testcase_03 | AC | 26 ms
24,592 KB |
testcase_04 | AC | 27 ms
25,232 KB |
testcase_05 | AC | 27 ms
24,592 KB |
testcase_06 | AC | 27 ms
24,592 KB |
testcase_07 | AC | 26 ms
24,976 KB |
testcase_08 | AC | 27 ms
24,976 KB |
testcase_09 | AC | 26 ms
24,592 KB |
testcase_10 | AC | 26 ms
25,232 KB |
testcase_11 | AC | 27 ms
24,592 KB |
testcase_12 | AC | 28 ms
24,976 KB |
testcase_13 | AC | 27 ms
24,976 KB |
testcase_14 | AC | 28 ms
25,204 KB |
testcase_15 | AC | 27 ms
24,976 KB |
testcase_16 | AC | 28 ms
24,976 KB |
testcase_17 | AC | 28 ms
24,592 KB |
testcase_18 | AC | 27 ms
24,464 KB |
testcase_19 | AC | 25 ms
24,976 KB |
testcase_20 | AC | 25 ms
24,952 KB |
testcase_21 | AC | 26 ms
24,952 KB |
testcase_22 | AC | 26 ms
24,824 KB |
testcase_23 | AC | 25 ms
24,824 KB |
testcase_24 | AC | 27 ms
24,824 KB |
testcase_25 | AC | 28 ms
25,240 KB |
testcase_26 | AC | 26 ms
24,568 KB |
testcase_27 | AC | 26 ms
24,952 KB |
testcase_28 | AC | 27 ms
25,208 KB |
testcase_29 | AC | 26 ms
25,208 KB |
testcase_30 | AC | 27 ms
24,824 KB |
testcase_31 | AC | 28 ms
24,568 KB |
testcase_32 | AC | 27 ms
24,952 KB |
testcase_33 | AC | 27 ms
25,208 KB |
testcase_34 | AC | 26 ms
25,464 KB |
testcase_35 | AC | 23 ms
24,812 KB |
testcase_36 | AC | 26 ms
24,556 KB |
testcase_37 | AC | 27 ms
25,196 KB |
testcase_38 | AC | 26 ms
24,812 KB |
testcase_39 | AC | 26 ms
24,940 KB |
testcase_40 | AC | 26 ms
25,196 KB |
testcase_41 | AC | 26 ms
25,196 KB |
testcase_42 | AC | 24 ms
25,196 KB |
testcase_43 | AC | 25 ms
25,196 KB |
testcase_44 | AC | 25 ms
25,196 KB |
testcase_45 | AC | 26 ms
24,556 KB |
testcase_46 | AC | 26 ms
25,196 KB |
testcase_47 | AC | 25 ms
24,556 KB |
testcase_48 | AC | 26 ms
25,196 KB |
testcase_49 | AC | 26 ms
25,452 KB |
testcase_50 | AC | 26 ms
24,812 KB |
testcase_51 | AC | 25 ms
25,196 KB |
ソースコード
/* -*- coding: utf-8 -*- * * 355.cc: No.355 数当てゲーム(2) - yukicoder */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int N = 4; const int PN = 24; // =4! /* typedef */ typedef vector<int> vi; /* global variables */ int cs[10]; vi pns[PN]; /* subroutines */ void ask(vi &ds, int &h, int &b) { for (int i = 0; i < N; i++) { if (i) putchar(' '); printf("%d", ds[i]); } putchar('\n'); cout.flush(); cin >> h >> b; if (h == N) exit (0); } int check(vi &ds) { int h, b, n; vi dps(N), hcs(N); bool first = true; for (int i = 0; i < PN; i++) { vi &pni = pns[i]; for (int j = 0; j < N; j++) dps[j] = ds[pni[j]]; ask(dps, h, b); n = h + b; if (h == n) { if (first) { for (int j = 0; j < N; j++) hcs[j] = dps[j]; first = false; } else for (int j = 0; j < N; j++) if (hcs[j] != dps[j]) hcs[j] = -1; } } if (n == 3) { int x = 0; for (int i = 0; i < N && x == ds[i]; i++, x++); for (int i = 0; i < N; i++) { int tmp = hcs[i]; hcs[i] = x; ask(hcs, h, b); if (h == 3) { hcs[i] = -1; break; } hcs[i] = tmp; } } for (int j = 0; j < N; j++) if (hcs[j] >= 0) cs[hcs[j]] = j; //for (int j = 0; j < N; j++) printf("%d ", hcs[j]); putchar('\n'); return n; } /* main */ int main() { vi pn(N); for (int i = 0; i < N; i++) pn[i] = i; for (int i = 0; i < PN; i++) { pns[i] = pn; next_permutation(pn.begin(), pn.end()); } memset(cs, -1, sizeof(cs)); vi ds(N); for (int i = 0; i < N; i++) ds[i] = i; int n0 = check(ds); for (int i = 0; i < N; i++) ds[i] = i + 4; int n1 = check(ds); for (int i = 0; i < N; i++) ds[i] = i + 6; int n2 = check(ds); for (int i = 0; i < 10; i++) if (cs[i] >= 0) ds[cs[i]] = i; int h, b; ask(ds, h, b); return 0; }