题目是进行N组a-b后然后a+c
然鹅TLE了 加上火车头依旧TLE
求:卡常方法
#pragma GCC optimize("Ofast","-funroll-loops","-fdelete-null-pointer-checks")
#pragma GCC target("ssse3","sse3","sse2","sse","avx2","avx")
#include<bits/stdc++.h>
using namespace std;
string a1,b1;
int a[100001],b[100001],c[100001];
string Add(string as,string bs){
int la=as.size(),lb=bs.size();
int lc=max(la,lb)+1;
//逆向存储
for(int i=0;i<la;++i){
a[i]=as[la-1-i]-'0';
}
for(int i=0;i<lb;++i){
b[i]=bs[lb-1-i]-'0';
}
//列竖式模拟加法
for(int i=0;i<lc-1;++i){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
//去除前导0
while(c[lc-1]==0&&lc>1){
--lc;
} string s;
for(int i=lc-1;i>=0;--i){
s+=c[i]+'0';
}
return s;
}
string Minu(string as,string bs){
bool nega=false;
if(as.size()<bs.size()||as.size()==bs.size()&&as<bs){
as.swap(bs);
nega=true;
}
int la=as.size(),lb=bs.size();
int lc=la;
for(int i=0;i<la;++i){
a[i]=as[la-1-i]-'0';
}
for(int i=0;i<lb;++i){
b[i]=bs[lb-1-i]-'0';
}
for(int i=0;i<lc;++i){
if(a[i]<b[i]){
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
while(c[lc-1]==0 && lc>1){
lc--;
}
string s;
if(nega==true) s+='-';
for(int i=lc-1;i>=0;--i){
s+=c[i]+'0';
}
return s;
}
int main(){
int n;
cin >> n;
string x;
for(int i=1;i<=n;++i){
cin>>a1>>b1;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
x=Add(x,a1);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cout<<Minu(x,b1)<<endl;
}
}