bzoj 1263

这是一道大水题


不知道从哪里听来的结论就是贪心优先拆分成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;
    }
} 


心得:
没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值