kmjp's blog

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

AtCoder ARC #011 : A - 鉛筆リサイクルの新技術、B - ルイス・キャロルの記憶術

今年初のARC、インチキ臭い解法でDが解けてしまってえらい順位に。
ほかの人はちゃんと解いているっぽいのに…。
ではまずは小手調べの2問から。
http://arc011.contest.atcoder.jp/tasks/arc011_1
http://arc011.contest.atcoder.jp/tasks/arc011_2

A - 鉛筆リサイクルの新技術

最初N本鉛筆があるとき、そのうちm本使うと新たなn本を生成することができる。
問題の通り繰り返すだけ。

void solve() {
	int i;
	int m=GETi();
	int n=GETi();
	int N=GETi();
	
	i=N;
	while(i>=m) {
		i-=m;
		i+=n;
		N+=n;
	}
	_P("%d\n",N);
	
	return;
}

B - ルイス・キャロルの記憶術

アルファベットをルールに従って数値に置き換える問題。
一部の文字は数字に置換できない。
単語中、1つも数値に置換できる文字が無い場合は、単語区切りのスペースがなくなるので注意しつつ行えばよい。

最初入力例5がおかしかったけど、無視して通してしまった。危ない危ない。

int mp[]={-1,1,1,2,-1,4,9,8,-1,3,8,5,7,9,-1,7,4,0,6,3,-1,5,2,6,-1,0};

void solve() {
	int f,r,i,j,k,l;
	char str[100];
	
	int N=GETi();
	f=0;
	FOR(i,N) {
		int p=0;
		GETs(str);
		FOR(j,strlen(str)) {
			char c=tolower(str[j]);
			if(!isalpha(c)) continue;
			k=mp[c-'a'];
			
			if(k>=0){
				if(f>0 && p==0) _P(" ");
				f++,p++;
				_P("%d",k);
			}
			
		}
	}
	_P("\n");
	
	return;
}

まとめ

B位の問題だと、質問する時間が惜しくて入力例がおかしくても質問しにくいな…。
AはまだしもBみたいな問題だと、スクリプト言語の方が対応しやすそうね。
ARC向けのPerlテンプレ作ろうかな…。