题解:CF625D Finals in arithmetic
不知道为啥其他题解的代码如此长。
下设
有两种情况:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5+5;
int n,a[N],b[N],c[N];
string s;
bool chk(int len){
if (b[1]==0) return 0;
for (int i=1; i<=len; i++){
if (!(0<=b[i] && b[i]<=9)) return 0;
}
for (int i=1; i<=len; i++){
c[i]=b[i]+b[len-i+1];
}
for (int i=len; i; i--){
if (c[i]>=10){
c[i-1]+=c[i]/10;
c[i]%=10;
}
}
for (int i=1; i<=n; i++){
if (c[i-(n-len)]!=s[i]-'0') return 0;
}
return 1;
}
void sol(int len){
int l=1,r=len;
while (l<=r){
if (a[l]>=a[r]+10){
a[r]+=10;
a[r-1]--;
}
if (a[l]==a[r]+1){
a[l]--;
a[l+1]+=10;
}
if (a[l]!=a[r]){
return;
}
if (l==r && a[l]%2){
return;
}
int x=(a[l]+1)/2;
b[l]=x;
b[r]=a[l]-x;
l++,r--;
}
if (chk(len)){
for (int i=1; i<=len; i++){
cout<<b[i];
}
cout<<"\n";
exit(0);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>s;
n=s.size();
s=" "+s;
for (int i=1; i<=n; i++){
a[i]=s[i]-'0';
}
sol(n);
if (s[1]=='1' && n!=1){
for (int i=1; i<n; i++){
a[i]=s[i+1]-'0';
}
a[1]+=10;
sol(n-1);
}
cout<<"0\n";
return 0;
}