#1本地出结果很快且正确但是TLE

P1932 A+B A-B A*B A/B A%B Problem

可这样 ``` #include<bits/stdc++.h> using namespace std; inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj; } struct BigInteger { static const int BASE=100000000; static const int WIDTH=8; vector<long long>s; BigInteger() { *this=0; } BigInteger(const int& num) { *this=num; } //赋值 BigInteger operator = (int num) { s.clear(); do { s.push_back(num%BASE); num/=BASE; } while(num>0); return *this; } BigInteger operator = (const string& str) { s.clear(); int x,len=(str.length()-1)/WIDTH+1; for(int i=0; i<len; i++) { int end=str.length()-i*WIDTH; int start=max(0,end-WIDTH); sscanf(str.substr(start,end-start).c_str(),"%lld",&x); s.push_back(x); } return *this; } //比较 bool operator < (const BigInteger& b) { if(s.size()<b.s.size())return true; if(s.size()>b.s.size())return false; for(int i=s.size()-1; i>=0; i--) { if(s[i]<b.s[i])return true; if(s[i]>b.s[i])return false; } return false; } bool operator >= (const BigInteger& b) { return !(*this<b); } bool operator == (const BigInteger& b) { if(s.size()!=b.s.size())return false; for(int i=0; i<s.size(); i++) if(s[i]!=b.s[i])return false; return true; } //+ BigInteger operator + (const BigInteger& b) { BigInteger c; c.s.clear(); for(int i=0,g=0; ; i++) { if(g==0&&i>=s.size()&&i>=b.s.size())break; int x=g; if(i<s.size())x+=s[i]; if(i<b.s.size())x+=b.s[i]; c.s.push_back(x%BASE); g=x/BASE; } return c; } //- BigInteger operator - (const BigInteger& b) { BigInteger c; c=*this; for(int i=0; i<c.s.size(); i++) { int tmp; if(i>=b.s.size())tmp=0; else tmp=b.s[i]; if(c.s[i]<tmp) { c.s[i+1]-=1; c.s[i]+=BASE; } c.s[i]-=tmp; } while(c.s.back()==0&&c.s.size()>1)c.s.pop_back(); return c; } void operator -= (const BigInteger& b) { *this=*this-b; } //* BigInteger operator * (const BigInteger& b) { BigInteger c; c.s.resize(s.size()+b.s.size()); for(int i=0; i<s.size(); i++) for(int j=0; j<b.s.size(); j++)c.s[i+j]+=s[i]*b.s[j]; for(int i=0; i<c.s.size()-1; i++) { c.s[i+1]+=c.s[i]/BASE; c.s[i]%=BASE; } while(c.s.back()==0&&c.s.size()>1)c.s.pop_back(); return c; } friend istream& operator >> (istream& input,BigInteger& x) { string s; if(!(input>>s))return input; x=s; return input; } friend ostream& operator << (ostream& output,const BigInteger& x) { output<<x.s.back(); for(int i=x.s.size()-2; i>=0; i--) { char buf[20]; sprintf(buf,"%08d",x.s[i]); for(int j=0; j<strlen(buf); j++)output<<buf[j]; } return output; } }; // / BigInteger Copy(const BigInteger& b,int x) { BigInteger t; t.s.resize(b.s.size()+x); for(int i=0; i<b.s.size(); i++)t.s[i+x]=b.s[i]; return t; } BigInteger Divide(const BigInteger& a,const BigInteger& b,BigInteger& mod) { BigInteger c; c.s.resize(a.s.size()-b.s.size()+1); mod=a; int Pow[(int)log2(BigInteger::BASE)+5]; Pow[0]=1; for(int i=1; i<=log2(BigInteger::BASE); i++)Pow[i]=Pow[i-1]*2; for(int i=c.s.size()-1; i>=0; i--) { BigInteger t; t=Copy(b,i); for(int j=log2(BigInteger::BASE); j>=0; j--) if(mod>=t*Pow[j]) { c.s[i]+=Pow[j]; mod-=t*Pow[j]; } } while(c.s.back()==0&&c.s.size()>1)c.s.pop_back(); return c; } BigInteger a,b; int main() { cin>>a>>b; if(a<b)cout<<a+b<<endl<<'-'<<b-a<<endl<<a*b<<endl<<0<<endl<<a<<endl; else { BigInteger c,d; c=Divide(a,b,d); cout<<a+b<<endl<<a-b<<endl<<a*b<<endl<<c<<endl<<d<<endl; } return 0; } ```
by jinzhilong @ 2023-11-25 11:17:09


@[jinzhilong](/user/1073550) 我知道这个是对的,但我只想知道为什么我和测试点1的输出完全一致却是wa。 最离谱的是我加了个除法判断0之后,结果由tle变成wa了。。。
by czm708033 @ 2023-11-25 15:57:40


@[czm708033](/user/94046) 爱莫能助
by jinzhilong @ 2023-11-26 16:00:15


|