Mediumを落としたが何とかHardを解いてレート増。
https://community.topcoder.com/stat?c=problem_statement&pm=14822
問題
整数が与えられる。
この整数を文字列とみなし、その部分文字列を取るとき、3の倍数となるのは何通りか。
解法
上の桁から順に、3の余り毎に組み合わせをDPで求めるだけ。
225ptとはいえDiv1では余りに安易な問題に思えるが…。
ll from[3]; ll to[3]; ll mo=1000000007; class MagicNumberThree { public: int countSubsequences(string s) { ZERO(from); int i; from[0]=1; FORR(c,s) { FOR(i,3) to[i]=from[i]; FOR(i,3) (to[(i+c-'0')%3]+=from[i])%=mo; swap(from,to); } return (from[0]+mo-1)%mo; } }
まとめ
問題が不足してるのかな?