読者です 読者をやめる 読者になる 読者になる

AOJ 0017と0027が通らない

Programming Algorithm AOJ

[誤答例]AOJ 0017 Caesar Chipher

#include <cstdio>
#include <cstring>

inline int cmp(char *ha, const char *ne, int len){
	for(int i = -128, f = 1; i <= 127; i++, f = 1){
		for(int j = 0; j < len; j++)
			if(ha[j]+i != ne[j]) f = 0;
		if(f) return i;
	}
	return 0;
}

int main(){
	char l[81];
	while(fgets(l, 81, stdin)){
		int o = 0, len = strlen(l);
		for(int i = 0; i < len; i++){
			if(len - i >= 3)
				if(o = cmp(l + i, "the", 3)) break;
			if(len - i >= 4){
				if(o = cmp(l + i, "this", 4)) break;
				if(o = cmp(l + i, "that", 4)) break;
			}
			for(int j = i; l[j] != ' ' && l[j] != '.' && j < len; i = ++j);
		}
		for(int i = 0; i < len - 1; i++)
			if(l[i] == ' ' || l[i] == '.')
				putchar(l[i]);
			else
				putchar(l[i] + o);
		puts("");
	}
	return 0;
}

最初はよく分からない原因でSubmit Toolで試せるサンプルケースすら通らなかった。バイナリレベルで見たらゴミデータがついていたので彼んい に長さから1を引いた。やっぱりAcceptされなかった。なんでだろう…

[誤答例]AOJ 0027 What day is today?

main(m,q){char *l[]={"Satur","Sun","Mon","Tues","Wednes","Thurs","Fri"};for(;scanf("%d%d",&m,&q)+1?m:0;printf("%sday\n",l[(q+(m<3?13+m:1+m)*13/5-(m<3?32:30))%7]));exit(0);}

多分式か何かが間違ってるのだと思うが、そもそもサンプルケースが特殊例2つというので、自分で新たにテストケース作ってデバッグするのもたるくて断念。