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

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

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

Loading…
Cancel
Save