久々の?ARC。ooo-でした。Cでかなり苦戦し、Dは時間切れ。
まずはA,Bを見ていきます。
http://arc009.contest.atcoder.jp/tasks/arc009_1
http://arc009.contest.atcoder.jp/tasks/arc009_2
A - 元気にお使い!高橋君
個数×価格を足し合わせて、20で割った余りを足しこむ。
いつもに比べAが簡単め。
void solve() { int f,r,i,j,k,l; int m=0,nm=0; int N=GETi(); l=0; FOR(i,N) { j=GETi(); k=GETi(); l+=j*k; } l += l/20; _P("%d\n",l); }
B - おとぎの国の高橋君
数字の大小順が変わった状態でソートする問題。
与えられた大小順で変換表と逆変換表を作る。
入力を変換してソートし、逆変換すればよい。
int N,M; int ma[10],re[10]; vector<int> num; void solve() { int f,r,i,j,k,l; int m=0,nm=0; FOR(i,10){ j=GETi(); ma[j]=i; re[i]=j; } N=GETi(); num.clear(); FOR(i,N){ j=GETi(); k=0; l=1; FOR(r,9) { k+=l*ma[(j/l)%10]; l*=10; } num.push_back(k); } sort(num.begin(),num.end()); FOR(i,N){ j=num[i]; k=0; l=1; FOR(r,9) { k+=l*re[(j/l)%10]; l*=10; } _P("%d\n",k); } }
まとめ
いつもよりAが簡単で、Bが若干難しめ。
最近STLのsortを使うようにしたのでsortがだいぶラクになった。