結果
| 問題 | No.555 世界史のレポート |
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-07-13 21:45:38 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 14 ms / 2,000 ms |
| コード長 | 1,120 bytes |
| コンパイル時間 | 356 ms |
| コンパイル使用メモリ | 30,208 KB |
| 実行使用メモリ | 12,928 KB |
| 最終ジャッジ日時 | 2024-11-22 15:48:58 |
| 合計ジャッジ時間 | 1,194 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 |
ソースコード
// yukicoder: No.555 世界史のレポート
// 2019.7.13 bal4u
#include <stdio.h>
#define HASHSIZ 900007
typedef struct { int r, w, c; } HASH;
HASH hash[HASHSIZ+5], *hashend = hash + HASHSIZ;
int insert(int r, int w, int c) {
HASH *p = hash + (int)((((long long)r << 16) + w) % HASHSIZ);
while (p->r) {
if (p->r == r && p->w == w) {
if (p->c <= c) return 0;
p->c = c;
return 1;
}
if (++p == hashend) p = hash;
}
p->r = r, p->w = w, p->c = c;
return 1;
}
typedef struct { int r, w, c; } Q; // レポートの文字数、クリップボードの文字数、コスト
Q q[1000000]; int top, end;
int C, V, N;
int main()
{
int r, w, c, mi;
scanf("%d%d%d", &N, &C, &V);
mi = 0x7ffffff;
q[0].r = 1, q[0].w = 1, q[0].c = C, end = 1;
while (top != end) {
r = q[top].r, w = q[top].w, c = q[top++].c;
if (r >= N) {
if (c < mi) mi = c;
continue;
}
if (c >= mi) continue;
if (insert(r, w, c)) {
q[end].r = r+w, q[end].w = w, q[end++].c = c + V; // paste
q[end].r = r+r, q[end].w = r, q[end++].c = c + C + V; // copy & paste
}
}
printf("%d\n", mi);
return 0;
}
bal4u