zoukankan      html  css  js  c++  java
  • bzoj1263: [SCOI2006]整数划分(高精度+构造)

      第一次写压位高精度只好抄黄学长的

      代码最后一段想了好久一看评论区才知道黄学长写错了= =很气

      自己最后改对了T^T

      这题最优是一直划分3出来直到<=4

    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<cstdio> 
    #include<algorithm>
    #define ll long long 
    using namespace std;
    const int maxn=500010,inf=1e9;
    int n,l=1,d[3000],ans[3000]={1};
    void mul(int x)
    {
        for(int i=0;i<l;i++)ans[i]*=x;
        for(int i=0;i<l;i++)
        {
            ans[i+1]+=ans[i]/10000;
            ans[i]%=10000;
        }
        for(;ans[l];l++)ans[l+1]+=ans[l]/10000,ans[l]%=10000;
    }
    int get(int x)
    {
        if(x>=1000)return 4;
        if(x>=100)return 3;
        if(x>=10)return 2;
        return 1;
    }
    int main()
    {
        scanf("%d",&n);
        for(;n>4;n-=3)mul(3);mul(n);
        for(int i=0;i<l;i++)d[i]=get(ans[i]);
        printf("%d
    ",(l-1)*4+d[l-1]);
        printf("%d",ans[l-1]);
        for(int i=l-2;i>=max(0,l-25);i--)
        {
            for(int j=d[i]+1;j<=4;j++)putchar('0');
            printf("%d",ans[i]);
        }
        if(l-25>0)
        {
            if(d[l-1]==3)printf("%d",ans[l-26]/1000);
            else if(d[l-1]==2)
            {
                if(ans[l-26]<1000)putchar('0');
                printf("%d",ans[l-26]/100);
            }
            else if(d[l-1]==1)
            {
                if(ans[l-26]<1000)putchar('0');
                if(ans[l-26]<100)putchar('0');
                printf("%d",ans[l-26]/10);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    第3 章流程控制语句
    第7 章面向对象程序设计
    linux运维常用命令
    第1 章初识Python
    nginx安装与部署
    Linux下软件安装的几种方式
    MAYA 多线程
    Maya pywin32
    python 中调用windows系统api操作剪贴版
    Maya QT interfaces in a class
  • 原文地址:https://www.cnblogs.com/Sakits/p/7449076.html
Copyright © 2011-2022 走看看