p13729
bokaro_kyoku_mania · · 题解
省流:多加特判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