結果
問題 |
No.3246 80% Accuracy Calculator
|
ユーザー |
👑 |
提出日時 | 2025-08-18 09:54:35 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 55 ms / 2,000 ms |
コード長 | 1,665 bytes |
コンパイル時間 | 314 ms |
コンパイル使用メモリ | 27,724 KB |
実行使用メモリ | 53,428 KB |
平均クエリ数 | 382.86 |
最終ジャッジ日時 | 2025-08-18 09:55:14 |
合計ジャッジ時間 | 4,266 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 43 |
コンパイルメッセージ
main.c: In function ‘add’: main.c:32:42: warning: ‘return’ with a value, in function returning void 32 | if (scanf("%d", &z) != 1) return -1; | ^ main.c:27:6: note: declared here 27 | void add(int i, int j, int k, int x, int y) | ^~~ main.c:33:28: warning: ‘return’ with a value, in function returning void 33 | if (z != 0) return -1; | ^ main.c:27:6: note: declared here 27 | void add(int i, int j, int k, int x, int y) | ^~~
ソースコード
#include <stdio.h> const int thr = 20; const int bit[25] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216}; int check(int i) { int head, tail, x; static int num[10000000] = {}, q[100]; for (tail = 0; tail < thr; tail++) { printf("? %c\n", 'A' + i); fflush(stdout); if (scanf("%d", &x) != 1) return -1; if (x < 1 || x > 8888888) return -1; q[tail] = x; num[x]++; } for (head = 0, x = -1; head < tail; head++) { if (num[q[head]] * 2 > thr) x = q[head]; num[q[head]] = 0; } if (x >= 0) return x; else return check(i); } void add(int i, int j, int k, int x, int y) { int z; printf("+ %c %c %c\n", 'A' + i, 'A' + j, 'A' + k); fflush(stdout); if (scanf("%d", &z) != 1) return -1; if (z != 0) return -1; z = check(k); if (z != x + y) add(i, j, k, x, y); } int main() { int x, y, xy, A[3]; x = check(0); y = check(1); if (x < 1 || x > 888 || y < 1 || y > 888) return -1; xy = x * y; A[0] = x; A[1] = y; A[2] = 0; int i, j, add_id, tmp_id, ans_id = 2; for (i = 0, add_id = 0; A[ans_id] != xy; i++) { for (j = 0; (((xy - A[ans_id]) / x) & bit[j]) == 0; j++); if (j == i) { tmp_id = 3 - ans_id - add_id; add(ans_id, add_id, tmp_id, A[ans_id], A[add_id]); A[tmp_id] = A[ans_id] + A[add_id]; ans_id ^= tmp_id; tmp_id ^= ans_id; ans_id ^= tmp_id; } tmp_id = 3 - ans_id - add_id; add(add_id, add_id, tmp_id, A[add_id], A[add_id]); A[tmp_id] = A[add_id] + A[add_id]; add_id ^= tmp_id; tmp_id ^= add_id; add_id ^= tmp_id; } printf("! %c\n", 'A' + ans_id); fflush(stdout); return 0; }