SRM 572
250
実験すると、oldpassword.size()-Kおきに同じになる必要があると分かるから、数える。
int minChange(string s, int K) { int n = s.size(); int p = n-K,ans = 0; if(p>=K){//elseの方だけで十分 for(int i = 0; i < K; i++){ if(s[i]!=s[i+p])ans++; } return ans; } else { for(int i = 0; i < p; i++){ int al[26] = {0},ct = 0; for(int j = i; j < n; j+=p){ al[s[j]-'a']++; ct++; } sort(al,al+26); ans += ct-al[25]; } return ans; } }
500
DFSだと枝刈りしてもTLEしそうなので諦める(実際落ちてました)
半分全列挙するそうですが、たぶん書けません。
1000
Unopened
o-- 193.56 224th
1382 -> 1466