kmjp's blog

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

UTPC2012 : B - 残像に口紅を

さて2問目。
2問目からちょっと考えさせられる。
http://utpc2012.contest.atcoder.jp/tasks/utpc2012_02


8章からなる文章で、各章で1文字ずつ使える文字が減る。
減る文字順を1つ答える問題。

文字順は1通り答えればよい。
文字列を後ろから見て登場した順の逆順に並べればよい。
登場しない文字があれば、頭に追加すればよい。

int L;
char str[200];

void solve() {
	int f,r,i,j,k,l;
	int m=0,nm=0,n;
	char res[10];
	int used[10];
	
	GETs(str);
	L=strlen(str);
	ZERO(res);
	ZERO(used);
	
	f=0;
	for(i=L-1;i>=0;i--) {
		if(str[i]!=' ') {
			used[str[i]-'A']++;
			res[f++]=str[i];
			FOR(j,i) if(str[j]==str[i]) str[j]=' ';
			str[i]=' ';
		}
	}
	
	for(;f<8;f++) {
		FOR(i,8) {
			if(used[i]==0) {
				used[i]=1;
				res[f]='A'+i;
				break;
			}
		}
	}
	reverse(res,res+8);
	_P("%s\n",res);
	
	return;
}

まとめ

一瞬考えさせるけど、コード自体は割と単純。
でも2問目にしてはちょっとややこしいよね。