結果
| 問題 |
No.3246 80% Accuracy Calculator
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2025-08-16 13:24:24 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 67 ms / 2,000 ms |
| コード長 | 1,508 bytes |
| コンパイル時間 | 320 ms |
| コンパイル使用メモリ | 27,596 KB |
| 実行使用メモリ | 53,896 KB |
| 平均クエリ数 | 403.84 |
| 最終ジャッジ日時 | 2025-08-16 13:24:29 |
| 合計ジャッジ時間 | 4,962 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 43 |
コンパイルメッセージ
main.c: In function ‘check’:
main.c:13:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
13 | scanf("%d", &x);
| ^~~~~~~~~~~~~~~
main.c: In function ‘add’:
main.c:31:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
31 | scanf("%d", &z);
| ^~~~~~~~~~~~~~~
ソースコード
#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);
scanf("%d", &x);
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);
scanf("%d", &z);
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);
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;
}