题解:CF988E Divisibility by 25

· · 题解

高情商:锻炼了选手使用快捷键并寻找细节的能力。

低情商:恶心人来的。棒棒糖。

对于每一种情况分类讨论。 然后贪心的移动,优先使用靠近尾部的数字。 注意如果会出现前导零的话,需要把最接近头部的非零数字移过去。 可能会无解,要判。 贡献统计要注意一些关于顺序的细节。 然后你就可以开始一个试的调了。 ```cpp #include<bits/stdc++.h> using namespace std; int ans[4]={1145140000,1145140000,1145140000,1145140000}; int t[10]; int main(){ string s; cin>>s; if(s.size()<2){ puts("-1"); return 0; } reverse(s.begin(),s.end()); for(int i=0;i<s.size();i++){ t[s[i]-'0']++; int qwq=s[i]-'0'; if(qwq==5&&t[qwq]==1)ans[1]+=i-45140000,ans[3]+=i-45140000,ans[2]+=i-(t[0]!=0)-1100000000; if(qwq==2&&t[qwq]==1)ans[1]+=i-(t[5]!=0)-1100000000; if(qwq==7&&t[qwq]==1)ans[3]+=i-(t[5]!=0)-1100000000; if(qwq==0&&t[qwq]==1)ans[2]+=i-45140000,ans[0]+=i-45140000; if(qwq==0&&t[qwq]==2)ans[0]+=i-1-1100000000; } for(int flc=0;flc<4;flc++){ int f,l,c,q; if(flc==0)f=0,l=1,c=0,q=2; if(flc==1)f=2,l=1,c=5,q=1; if(flc==2)f=5,l=1,c=0,q=1; if(flc==3)f=7,l=1,c=5,q=1; string S; memset(t,0,sizeof t); for(int i=0;i<s.size();i++){ t[s[i]-'0']++; int qwq=s[i]-'0'; if(qwq==f&&t[qwq]==l)continue; if(qwq==c&&t[qwq]==q)continue; S+=s[i]; } reverse(S.begin(),S.end()); for(int i=0;i<S.size();i++) if(S[i]!='0'){ ans[flc]+=i; break; } } cout<<(min({ans[0],ans[1],ans[2],ans[3]})>10000?-1:min({ans[0],ans[1],ans[2],ans[3]})); return 0; } // さよならの想い出を // 瞳にたたえて 见つめる梦远く ```