kmjp's blog

競技プログラミング参加記です

April Fools Day Contest 2013 : C. WTF?、D. Orange

さて次の2問。
http://codeforces.com/contest/290/problem/C
http://codeforces.com/contest/290/problem/D

C. WTF?

謎の文章に従い、入力に対する出力を返せ。

なんかプログラム言語っぽいことはすぐわかる。
予約語で調べると、どうもLOLCODEっぽい物とわかったが、本番はLOLCODEのサイトが落ちており、関連サイトで文法を調べても微妙に文法が異なって直接は使えない。
結局自力で解読してC++に落とした。

サンプル出力が小数でびっくりしたけど、小数化は最後の除算だけだね。

void solve() {
	int f,r,i,j,k,l,x,y;
	int ma=0;
	
	int TUX,FOO,BAR,BAZ,QUZ,PUR;
	TUX=GETi();
	FOO=BAR=BAZ=0;
	QUZ=1;
	
	while(TUX--) {
		PUR=GETi();
		FOO += PUR;
		BAR++;
		
		if(FOO*QUZ >= BAR*BAZ){
			BAZ=FOO;
			QUZ=BAR;
		}
	}
	
	_P("%.12lf\n",BAZ/(double)QUZ);
	
	return;
}

D. Orange

同じく謎の記号群に従い、入力に対する出力を返せ。

Editorialによると既存の文字形態があるようだが、本番はそれを知らなくても推測できた。
まずサンプルから、どうも大文字小文字を変換しているらしいと気付く。
次に、入力2行目の整数値を[16]に格納しており、そこを後の判定文に使っていることから、この整数値に基づき大文字小文字化判定が行われていることがわかる。

void solve() {
	int f,r,i,j,k,l,x,y;
	int ma=0;
	char st[100];
	
	GETs(st);
	x=GETi();
	FOR(i,strlen(st)) {
		if(tolower(st[i])-'a'<x) st[i]=toupper(st[i]);
		else st[i]=tolower(st[i]);
	}
	
	_P("%s\n",st);
	
	return;
}
||

*まとめ

Dはコードが絵で記載されているので検索するのは難しいけど、問題の傾向としてはCとDが似ていて残念。