写得泪奔了。
我已开始MAXN写到了2048,数组也是开到2048,结果WA不断。
还以为是高精度写错了。
然后重写了三四遍,尼玛还是WA。
还有今天UVA连接好慢,我都成F5党了。交上去的代码一片CP(连接失败。。代码交不全)
后来把MAXN改为2000 数组2048直接AC了。
测试数据不是说1~2000么。。。。。。
多开一点。。。。。没事吧。。。。。。。。
啥也不说了,都是泪。T T
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=2000;
const int SIZE=MAXN+48;
class bign
{
public:
int data[500];
int len;
bign(){ memset(data,0,sizeof(data)); len=1; }
void operator = (const int &x)
{
int temp=x;
while(temp!=0)
{
data[len++]=temp % 10;
temp/=10;
}
}
bign operator +(const bign &a)
{
bign temp;
temp.len=max(len,a.len);
for(int i=1;i<=temp.len;i++)
{
temp.data[i]+=data[i]+a.data[i];
if(temp.data[i]>=10)
{
temp.data[i+1]=temp.data[i+1]+temp.data[i]/10;
temp.data[i]%=10;
if(i==temp.len) temp.len++;
}
}
return temp;
}
bign operator +=(const bign &a)
{
*this=*this+a;
return *this;
}
bign operator +(const int &a)
{
bign temp;
temp=a;
temp= *this + temp;
return temp;
}
friend ostream & operator << (ostream &print ,const bign &ans)
{
int i=ans.len;
while(ans.data[i]==0&&i>=1)
i--;
if(i!=0)
for(;i>0;i--)
print<<ans.data[i];
else print<<"0";
return print;
}
};
bign ans[SIZE],d[SIZE];
const int need[]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int main()
{
d[0]=1;
for(int i=0;i<=MAXN;i++)
for(int j=0;j<10;j++)
if(!(i==0&&j==0) && need[j] + i<=MAXN)
d[ need[j] + i] += d[i];
ans[0]=0;
for(int i=1;i<=MAXN;i++)
ans[i] = ans[i-1]+d[i];
for(int i = 6; i <= MAXN; i++)
ans[i] =ans[i]+ 1;
int n;
while(cin>>n)
{
cout<<ans[n]<<endl;
}
return 0;
}