p13729

· · 题解

省流:多加特判TLE 100->75

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
template<typename T>inline void read(T&x){
    x=0;
    char c;
    int sign=1;
    do{
        c=getchar();
        if(c=='-'){
            sign=-1;
        }
    }while(!isdigit(c));
    do{
        x=x*10+c-'0';
        c=getchar();
    }while(isdigit(c));
    x*=sign;
}
inline void write(int x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
inline string readstr(){
    string str="";
    char ch=getchar();
    while(ch=='\n'||ch=='\r'){
        ch=getchar();
    }
    while(ch!='\n'&&ch!='\r'){
        str+=ch;
        ch=getchar();
    }
    return str;
}
inline void writestr(string s){
    for(int i=0;s[i]!='\0';i++){
        putchar(s[i]);
    }
}
int check(int x){
    string s="";
    while(x){
        s+=x%10+'0';
        x/=10;
    }
    int cnt=0;
    for(int i=0;i<s.size();i++){
        if((int)(s[i]-'0')%2==1){
            cnt++;
        }
    }
    if(cnt==s.size()){
        return 0;
    }
    else if(cnt==s.size()-1){
        return -2;
    }
    else{
        return -1;
    }
}
int t;
int a;
signed main(){
//  ios::sync_with_stdio(0);
//  cin.tie(0),cout.tie(0);
//  freopen("odd4.in","r",stdin);
    read(t);
    while(t--){
        read(a);
        if(check(a)==0){
            write(0);
            putchar('\n');
        }
        else if(check(a)!=0){
            int op=a;
            string s1=" ";
            bool f=1;
            int cntt=0;
            while(op){
                s1+=op%10+'0';
                op/=10;
                cntt++;
            }
            reverse(s1.begin(),s1.end());
            s1.erase(cntt);
            for(int i=0;i<cntt;i++){
                if(s1[i]!=' '){
                    if(f==0){
                        s1[i]='1';
                    }
                    if((s1[i]-'0')%2==0){
                        s1[i]+=1;
                        f=0;
                    }
                }
            }
//          if(check(a)==-2){
                int ans=0;
                for(int i=0;i<cntt;i++){
                    ans+=(int)(s1[i]-'0')*(pow(10,cntt-i));
                }
                ans/=10;
                write(ans-a);
                putchar('\n');
//          }
//          else{
//              int anss=0;
//              bool opop=1;
//              while(opop==1){
//                  anss++;
//                  if(check(a+anss)==0){
//                      opop=0;
//                  }
//              }
//              write(anss);
//              putchar('\n');
//          }
        }
    }

    return 0;
}

思路: 把其中偶数的最高位+1,后面位数全部变成1