这是一道大水题
不知道从哪里听来的结论就是贪心优先拆分成3,然后只可能剩下4或者2
然后乘起来就好了
/**************************************************************
Problem: 1263
User: 27rabbit
Language: C++
Result: Accepted
Time:360 ms
Memory:1308 kb
****************************************************************/
#include<bits/stdc++.h>
#define lca long long
using namespace std;
int tot;
struct big{
int xx[5050];
int cnt;
big(int x=0)
{
memset(xx,0,sizeof(xx));
xx[1]=x;
cnt=1;
}
int & operator [] (int x)
{
return xx[x];
}
}ans(1);
big operator *= (big &a,big &b)
{
big z;
for(int i=1;i<=a.cnt;i++)
for(int j=1;j<=b.cnt;j++)
z[i+j-1]+=a[i]*b[j],z[i+j]+=z[i+j-1]/10,z[i+j-1]%=10;
z.cnt=a.cnt+b.cnt;
if(!z[z.cnt]) z.cnt--;
a=z;
}
int main()
{
int n;
scanf("%d",&n);
while(n>4)
{
big temp(3);
n-=3;
ans*=temp;
}
if(n==4)
{
big temp(4);
ans*=temp;
}
else if(n==3)
{
big temp(3);
ans*=temp;
}
else if(n==2)
{
big temp(2);
ans*=temp;
}
printf("%d\n",ans.cnt);
for(int i=ans.cnt;i;i--)
{
printf("%d",ans[i]);
tot++;
if(tot==100)
break;
}
}
心得:
没有