专栏文章

题解:CF988E Divisibility by 25

CF988E题解参与者 3已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@mios91a5
此快照首次捕获于
2025/12/03 00:18
3 个月前
此快照最后确认于
2025/12/03 00:18
3 个月前
查看原文
高情商:锻炼了选手使用快捷键并寻找细节的能力。
低情商:恶心人来的。棒棒糖。

2525 的倍数必然以 00,25,50,75\texttt{00},\texttt{25},\texttt{50},\texttt{75} 四个字符串之一结尾。
对于每一种情况分类讨论。
然后贪心的移动,优先使用靠近尾部的数字。
注意如果会出现前导零的话,需要把最接近头部的非零数字移过去。
可能会无解,要判。
贡献统计要注意一些关于顺序的细节。
然后你就可以开始一个试的调了。
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;
}
// さよならの想い出を
// 瞳にたたえて 见つめる梦远く

评论

3 条评论,欢迎与作者交流。

正在加载评论...