草体にぼ日記

だらだらと

AGC015B Evilator

問題B - Evilator


↓AC提出
Submission #8506338 - AtCoder Grand Contest 015

AC

int main()
{
	cout <<setprecision(10);
	string s; cin >> s;
	ll ans = 0;
	ll n = s.size();
	rep(i,s.size()){
		if(s[i]=='U'){
			ans += n - (i+1);
			ans += 2 * i ;
		}else{
			ans +=  2 * (n - i - 1);
			ans += 	 i ;
		}
	}
	cout << ans << endl;
}

解法
・0インデックスなら、s[i]がU のとき、それより下に行くのは
0,1,....,i-1 のi個がある、これらは2回押さなきゃたどり着けない。
それ以外のn - 1 - i 個の階(今より上の階)に対しては 1回押せばいけるので このような立式になる。
s[i]がDならその逆。