↓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ならその逆。