結果

問題 No.380 悪の台本
ユーザー bal4ubal4u
提出日時 2019-04-16 20:53:46
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 5 ms / 1,000 ms
コード長 1,741 bytes
コンパイル時間 151 ms
コンパイル使用メモリ 30,956 KB
実行使用メモリ 4,348 KB
最終ジャッジ日時 2023-10-22 07:12:42
合計ジャッジ時間 733 ms
ジャッジサーバーID
(参考情報)
judge11 / judge10
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,348 KB
testcase_01 AC 1 ms
4,348 KB
testcase_02 AC 1 ms
4,348 KB
testcase_03 AC 1 ms
4,348 KB
testcase_04 AC 2 ms
4,348 KB
testcase_05 AC 2 ms
4,348 KB
testcase_06 AC 2 ms
4,348 KB
testcase_07 AC 5 ms
4,348 KB
testcase_08 AC 1 ms
4,348 KB
testcase_09 AC 2 ms
4,348 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

// yukicoder: No.380 悪の台本
// 2019.4.16 bal4u

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#if 0
#define gc() getchar_unlocked()
#define pc(c) putchar_unlocked(c)
#else
#define gc() getchar()
#define pc(c) putchar(c)
#endif
int ins(char *s)  // 文字列の入力 スペース以下の文字で入力終了
{
	int c;
	char *p = s;
	do {
		c = gc();
		if (c == EOF) return -1;
		*s++ = c;
	} while (c >= ' ');
	*--s = 0;
	return s - p;
}
void outs(char *s) { while (*s) pc(*s++); }

char *msg[2] = { "CORRECT (maybe)\n", "WRONG!\n" };
char s[120000]; 
char *name[5] = { "rabi", "digi", "petit", "gema", "piyo" };
int  nlen[5] = { 4, 4, 5, 4, 4 };
char *tail[5] = { "\0", "nyo", "nyu", "gema", "pyo" };

int myCmp(char *s1, char *s2)
{
	while (*s1 && *s2) {
		if (isalpha(*s2) && tolower(*s2) == *s1) s1++, s2++;
		else return 1;
	}
	return !(*s1 == 0 && *s2 == 0);
}

int main()
{
	int i, w, id, f;
	char *p, *q;

	while ((w = ins(s)) >= 0) {
		if (w < 6) goto err;
		p = s; for (i = 0; i < 6 && *p != ' '; i++) p++;
		if (i >= 6) goto err;
		*p = 0; for (id = 0; id < 5; id++) {
			if (strcmp(s, name[id]) == 0) break;
		}
		if (id >= 5) goto err;
		if (id == 0) {  // rabi
			f = 0, p++; while (*p) {
				if (isalnum(*p)) f = 1;
				p++;
			}
			if (!f) goto err;
		} else {
			if ((id == 3 && w - (nlen[id]+1) < 4) || w - (nlen[id] + 1) < 3) goto err;
			q = s + w - 1;
			for (i = 0; i < 3; i++) {
				if (isalnum(*q)) break;
				q--;
			}
			if (i >= 3 && !isalnum(*q)) goto err;
			*(q+1) = 0;
			w -= nlen[id]-1-i;
			if (id == 3 && w < 4 || w < 3) goto err;
			q -= (id == 3)? 3: 2;
			if (q < p) goto err;
			if (myCmp(tail[id], q)) goto err;
		}
		outs(msg[0]);
		continue;
err:	outs(msg[1]);
	}
	return 0;
}
0