kmjp's blog

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

AtCoder ARC #009 : A - 元気にお使い!高橋君、B - おとぎの国の高橋君

久々の?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がだいぶラクになった。