結果
| 問題 |
No.518 ローマ数字の和
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-05-04 17:59:28 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| コード長 | 1,428 bytes |
| コンパイル時間 | 822 ms |
| コンパイル使用メモリ | 29,804 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-23 03:52:39 |
| 合計ジャッジ時間 | 1,456 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
コンパイルメッセージ
main.c: In function 'in':
main.c:7:14: warning: implicit declaration of function 'getchar_unlocked' [-Wimplicit-function-declaration]
7 | #define gc() getchar_unlocked()
| ^~~~~~~~~~~~~~~~
main.c:15:24: note: in expansion of macro 'gc'
15 | int n = 0, c = gc();
| ^~
main.c: In function 'outs':
main.c:8:15: warning: implicit declaration of function 'putchar_unlocked' [-Wimplicit-function-declaration]
8 | #define pc(c) putchar_unlocked(c)
| ^~~~~~~~~~~~~~~~
main.c:28:33: note: in expansion of macro 'pc'
28 | void outs(char *s) { while (*s) pc(*s++); }
| ^~
ソースコード
// yukicoder: No.518 ローマ数字の和
// 2019.5.4 bal4u
#include <stdio.h>
#if 1
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif
int in() // 非負整数の入力
{
int n = 0, c = gc();
// while (isspace(c)) c = gc();
do n = 10 * n + (c & 0xf), c = gc(); while (c >= '0');
return n;
}
void ins(char *s) // 文字列の入力 スペース以下の文字で入力終了
{
do *s = gc();
while (*s++ > ' ');
*(s-1) = 0;
}
void outs(char *s) { while (*s) pc(*s++); }
int d1[128], d2[128][128];
char R[15];
char *e[4][10] = {
{0, "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{0, "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{0, "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{0, "M", "MM", "MMM"}};
int main()
{
int i, k, N, s, r;
char *p;
d1['I'] = 1, d1['V'] = 5, d1['X'] = 10;
d1['L'] = 50, d1['C'] = 100, d1['D'] = 500, d1['M'] = 1000;
d2['I']['V'] = 4, d2['I']['X'] = 9, d2['X']['L'] = 40;
d2['X']['C'] = 90, d2['C']['D'] = 400, d2['C']['M'] = 900;
s = 0, N = in(); while (N--) {
ins(p = R);
r = 0; while (*p) {
if (d2[*p][*(p+1)] > 0) r += d2[*p][*(p+1)], p+=2;
else r += d1[*p++];
}
s += r;
}
if (s >3999) { outs("ERROR\n"); return 0; }
i = 3, k = 1000; while (s) {
if (s / k > 0) outs(e[i][s/k]);
s %= k, i--, k /= 10;
}
pc('\n');
return 0;
}
bal4u