792C - Divide by Three

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ACM__dongsheng/article/details/68061599

题意:有个string ,由数字组成。 你要尽可能少的删除字符,使得该sting 化的数字能被3整除,输出 删除后的任意结果(不含有前缀0)。
最多删除2个非零字符。sum =2时,最多(s[i]%3==1+s[j]%3==1);
sum = 1 ,最多 (s[i]%3==2+s[j]%3==2)%3
(1)如果 sum % 3==0,直接输出。
(2)s[i]%3 == sum , 直接删除s[i]
( 3 )存在 两个 (s[i] + s[k])%3 == sum ,删除 s[i],s[k] 。 0,3的倍数, s[i] % 3 ==sum ,的不管。

找 s[i] 的时候,从低位往高位走,可以尽量避免前缀0的存在。

#include <bits\stdc++.h>
using namespace std;
string s;
vector<string> ans;

string ts(string ex){
    int n = ex.size();
    int id = 0;
    while(id+1<n && ex[id]=='0') id++; 
    return ex.substr(id);
}

int main(){
    cin>>s;
    int sum = 0, flag = 0;
    int len = s.length();
    for(int i=0;i<len;i++){
        sum  = (sum + s[i]-'0') % 3;
        if(s[i] == '0') flag = 1;
    }
    if(sum==0){
        cout<<s<<endl;
        return 0;
    }   
    for(int i=len-1;i>=0;i--){
        int x = s[i]-'0';
        if(x%3 == sum ){
            string t = s.substr(0,i) + s.substr(i+1);
            t = ts(t);
            if(!t.empty()){
                ans.push_back(t); 
                break;
            }
        }
    }
    int k = -1; 
    for(int i=len-1;i>=0;i--){
        int x= s[i]-'0';
        if(x%3==0 || x%3 == sum) continue;
        if(k==-1) {
            k = i;
            continue;
        }
       string str = s.substr(0,i);                  // 0 i-1 
       if(i+1 != k) str += s.substr(i+1,k-i-1);    // i+1 k-1  
       if(k+1 < len) str += s.substr(k+1);          // k+1  
        str = ts(str);
        if(!str.empty()) {
          ans.push_back(str);   
        };
        break;
    }
    if(ans.empty()) {
        if(flag) printf("0\n");
        else printf("-1\n");
    }
    else{
        string ss;
        int lens = ans.size(), leng = 0;
        for(int i=0;i<lens;i++){
            if(ans[i].length() > leng ){
                ss = ans[i];
                leng = ans[i].length();
            }
        }
        cout<<ss<<"\n";
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ACM__dongsheng/article/details/68061599