Fixed NOIP2007T3 (TLE[2/10]->AC)

master
大蒟蒻 9 years ago
parent 3b9304d443
commit 2f1ad38bc2

@ -3,11 +3,14 @@
int n,m,a[90];
struct bigint
{
int data[80];
int data[80],len;
void refresh()
{
for(int i=0; i<40; i++)
for(int i=0; i<30; i++)
data[i+1]+=data[i]/10,data[i]%=10;
for(len=70;len>=0&&data[len]==0;len--);
if(len<0) len=0;
len++;
}
bigint(int val=0)
{
@ -17,7 +20,7 @@ struct bigint
}
bigint operator+=(const bigint& rhs)
{
for(int i=0; i<40; i++)
for(int i=0; i<rhs.len; i++)
data[i]+=rhs.data[i];
refresh();
return *this;
@ -30,8 +33,8 @@ struct bigint
bigint operator*(const bigint& rhs)
{
bigint ret;
for(int i=0; i<40; i++)
for(int j=0; j<40; j++)
for(int i=0; i<len; i++)
for(int j=0; j<rhs.len; j++)
ret.data[i+j]+=(data[i]*rhs.data[j]);
ret.refresh();
return ret;
@ -39,14 +42,11 @@ struct bigint
};
bigint max(const bigint& a,const bigint& b)
{
int len1,len2;
for(len1=40; len1>=0&&a.data[len1]==0; len1--);
for(len2=40; len2>=0&&b.data[len2]==0; len2--);
if(len1>len2) return a;
if(len1<len2) return b;
for(; len1+len2>=0; len1--,len2--)
if(a.data[len1]>b.data[len2]) return a;
else if(a.data[len1]<b.data[len2]) return b;
if(a.len>b.len) return a;
if(a.len<b.len) return b;
for(int len=a.len; len>=0; len--)
if(a.data[len]>b.data[len]) return a;
else if(a.data[len]<b.data[len]) return b;
return b;
}
bigint _2n[90],f[90][90],tmp,ans;

Loading…
Cancel
Save