为什么会T,不理解。。。
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
string s;
ll n,p[100005],hx[100005];
void init(){
for(ll i=1;i<=n;i++)
hx[i]=hx[i-1]*10+(s[i]-'0');
p[0]=1;
for(ll i=1;i<=n;i++)
p[i]=p[i-1]*10;
}
inline ll get(ll x,ll y){
return hx[y]-hx[x-1]*p[y-x+1];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>s;s='.'+s;n=s.size()-1;
init();
// while(1){
// ll x,y;cin>>x>>y;
// cout<<get(x,y)<<endl;
// }
for(ll k=1;n-k-k>=1;k++){
if(get(1,k)+get(k+1,n-k)==get(n-k+1,n)){
for(ll i=1;i<=k;i++)cout<<s[i];cout<<"+";
for(ll i=k+1;i<=n-k;i++)cout<<s[i];cout<<"=";
for(ll i=n-k+1;i<=n;i++)cout<<s[i];
return 0;
}
if(get(1,k)+get(k+1,n-k-1)==get(n-k,n)){
for(ll i=1;i<=k;i++)cout<<s[i];cout<<"+";
for(ll i=k+1;i<=n-k-1;i++)cout<<s[i];cout<<"=";
for(ll i=n-k;i<=n;i++)cout<<s[i];
return 0;
}
if(get(1,n-2*k)+get(n-2*k+1,n-k)==get(n-k+1,n)){
for(ll i=1;i<=n-2*k;i++)cout<<s[i];cout<<"+";
for(ll i=n-2*k+1;i<=n-k;i++)cout<<s[i];cout<<"=";
for(ll i=n-k+1;i<=n;i++)cout<<s[i];
return 0;
}
if(get(1,n-2*k-1)+get(n-2*k,n-k-1)==get(n-k,n)){
for(ll i=1;i<=n-2*k-1;i++)cout<<s[i];cout<<"+";
for(ll i=n-2*k;i<=n-k-1;i++)cout<<s[i];cout<<"=";
for(ll i=n-k;i<=n;i++)cout<<s[i];
return 0;
}
}
return 0;
}