zoukankan      html  css  js  c++  java
  • P1066 2^k进制数

    P1066 2^k进制数

    这个题目还是没有听明白。。。借鉴一下某位不愿透露的邱姓dalao的blog。。。

     结合一下题解

    普及一下知识:一个2^k进制n位数转换成2进制数时最多有n*k位

    试图理解

    。。。。。。。。。。。。。。。。

    。。。。真的太南啦不然你就结合一下blog。。。。认错

    代码:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int a[4][512][201],tot[201],mmax;
    int pow(int a,int b)
    {
        int ans=1,with=a;
        while(b)
        {
            if(b&1) ans*=with;
            with*=with;
            b>>=1;
        }
        return ans;
    }
    void jiafa(int j[],int a[])
    {
        int lb=1;
        while(lb<=j[0]||lb<=a[0])
        {
            j[lb]+=a[lb];
            if(j[lb]>=10) 
            {
                j[lb]%=10;
                j[lb+1]++;
            }
            lb++;
        }
        while(j[lb]>=10) 
        {
            j[lb]%=10;
            lb++;
            j[lb]++;
        }
        while(!j[lb]&&lb>0) lb--;
        if(lb>j[0]) j[0]=lb;
    }
    void jiafa1(int a[],int b)
    {
        int lb=0;
        while(b)
        {
            a[++lb]=b%10;
            b/=10;
        }
        a[0]=lb;
        jiafa(tot,a);
    }
    int main()
    {
        int k,w;
        cin>>k>>w;
        int g=w/k;
        bool youyu=0;
        int mmax2;
        if(w%k)
        {
            g++;
            youyu=1;
            mmax2=pow(2,w%k)-1;
        } 
        mmax=pow(2,k)-1;
        for(int i=1;i<mmax;i++) jiafa1(a[0][i],mmax-i);
        int l=0,n=1;
        for(int i=3;i<=g;i++)
        {
            if(i==g&&youyu&&mmax2<mmax)
            {
                for(int i=mmax-1;i>mmax2;i--)
                    jiafa(a[n][mmax2],a[l][i]);
                jiafa(tot,a[n][mmax2]);
                for(int j=mmax2-1;j>=1;j--)
                {
                    memcpy(a[n][j],a[n][j+1],sizeof(a[n][j+1]));
                    jiafa(a[n][j],a[l][j+1]);
                    jiafa(tot,a[n][j]);
                }
                break;
            } 
            jiafa(a[n][mmax-1],a[l][mmax]);
            jiafa(tot,a[n][mmax-1]);
            for(int j=mmax-2;j>=1;j--)
            {
                memcpy(a[n][j],a[n][j+1],sizeof(a[n][j+1]));
                jiafa(a[n][j],a[l][j+1]);
                jiafa(tot,a[n][j]);
            }
            for(int j=1;j<=mmax;j++)
            memset(a[l][j],0,sizeof(a[l][j]));
            n++;l++;
            if(n==3) n=0;
            if(l==3) l=0;
        }
        int lt=tot[0];
        while(!tot[lt]&&lt>1) lt--;
        for(;lt>0;lt--) cout<<tot[lt];
        return 0;
    }
  • 相关阅读:
    webStorm 快捷键 + 浏览器
    Linux安装nodejs和npm
    jQuery页面滚动底部加载数据
    html跳转指定位置-利用锚点
    JavaScript自定义对象
    vue v-time指令封装(接口返回时间戳 在到日期转换)
    vue 之 引入elementUI(两步走)
    小白6步搞定vue脚手架创建项目
    vue 封装组件
    npm dev run 报错
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/10667106.html
Copyright © 2011-2022 走看看