今年初の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テンプレ作ろうかな…。