SRM509 Div1 Easy - LuckyRemainder
問題
数字aを文字とみなしたときの全ての(連続とは限らない)subsetの和を9で割った余りを求める
解法
10^k %9 = 1より各桁を独立に考えることができる
全ての桁についてその数(と10^kの積)を含む部分列は2^(n-1)個あるからこれの総和%9を求めればいい
ex) 123なら
1桁目を含むsubset = 1, 12(10+2), 13(10+3), 123(100+23)
2桁目 = 2, 12(2+10), 23(20+3), 123(20+103)
3桁目 = 3, 13(3+10), 23(3+20), 123(3+120)
こんな感じ?
class LuckyRemainder { public: int getLuckyRemainder(string a) { int n = a.size(), res = 0; rep(i,n) (res += (ll)(a[i]-'0') * (1ll<<(n-1)) %9) %= 9; return res; } };