結果
| 問題 |
No.662 スロットマシーン
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-07-20 13:37:37 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,645 bytes |
| コンパイル時間 | 552 ms |
| コンパイル使用メモリ | 31,616 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-12-29 17:27:28 |
| 合計ジャッジ時間 | 1,408 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 |
コンパイルメッセージ
main.c: In function 'in':
main.c:8:14: warning: implicit declaration of function 'getchar_unlocked' [-Wimplicit-function-declaration]
8 | #define gc() getchar_unlocked()
| ^~~~~~~~~~~~~~~~
main.c:13:24: note: in expansion of macro 'gc'
13 | int n = 0, c = gc();
| ^~
ソースコード
// yukicoder: No.662 スロットマシーン
// 2019.7.20 bal4u
#include <stdio.h>
#include <string.h>
#if 1
#define gc() getchar_unlocked()
#else
#define gc() getchar()
#endif
int in() { // 非負整数の入力
int n = 0, c = gc();
do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0');
return n;
}
void ins(char *s) { // 文字列の入力 スペース以下の文字で入力終了
do *s = gc();
while (*s++ > ' ');
*(s-1) = 0;
}
typedef long long ll;
#define HASHSIZ 1009
typedef struct { char *s; int id; } HASH;
HASH hash[HASHSIZ+2], *hashend = hash+HASHSIZ;
void insert(char *s, int id) {
ll i; int j; char *p; HASH *tp;
i = 0, p = s;
for (j = 0; j < 12 && *p; j++) i = (i << 6) + (*p++ +1-'A');
tp = hash + (int)(i % HASHSIZ);
while (tp->s != NULL) {
if (++tp == hashend) tp = hash;
}
tp->s = s, tp->id = id;
}
int lookup(char *s) {
ll i; int j; char *p; HASH *tp;
i = 0, p = s;
for (j = 0; j < 12 && *p; j++) i = (i << 6) + (*p++ +1-'A');
tp = hash + (int)(i % HASHSIZ);
while (tp->s != NULL) {
if (!strcmp(tp->s, s)) return tp->id;
if (++tp == hashend) tp = hash;
}
return -1;
}
char str[5][12];
int coin[5];
int f[3][5];
int main()
{
int i, j, k, n;
ll n3, u[5];
char s[12];
double a;
for (i = 0; i < 5; i++) {
ins(str[i]), coin[i] = in();
insert(str[i], i);
}
n3 = 1; for (i = 0; i < 3; i++) {
n = in(), n3 = n3*n;
while (n--) {
ins(s);
if ((k = lookup(s)) >= 0) f[i][k]++;
}
}
a = 0; for (i = 0; i < 5; i++) {
u[i] = (ll)f[0][i]*f[1][i]*f[2][i]*5;
a += u[i] * coin[i];
}
printf("%lf\n", a / n3);
for (i = 0; i < 5; i++) printf("%lld\n", u[i]);
return 0;
}
bal4u