题解:CF988E Divisibility by 25
fish_love_cat
·
·
题解
高情商:锻炼了选手使用快捷键并寻找细节的能力。
低情商:恶心人来的。棒棒糖。
对于每一种情况分类讨论。
然后贪心的移动,优先使用靠近尾部的数字。
注意如果会出现前导零的话,需要把最接近头部的非零数字移过去。
可能会无解,要判。
贡献统计要注意一些关于顺序的细节。
然后你就可以开始一个试的调了。
```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;
}
// さよならの想い出を
// 瞳にたたえて 见つめる梦远く
```