zoukankan      html  css  js  c++  java
  • 2017轻工业校赛 维克兹的进制转换 https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2134

    因为在每个数只能有二进制构成  即5有21,101折两种方式  不同于2进制的方式为数字最大 可以为2

    所以在末尾只有0,1,2   如果数字为奇数  末尾必定为1  所以我们理解为n/2*2+1即为这个数字

    同理当为偶数时  n/2*2表示末尾为0   如果末尾为2即为(n-2)/2*2+2;

    所以表达式 :

    if(i%2) dp[i]=dp[i/2];

    else dp[i]=dp[i/2]+dp[i/2-1];

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<math.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 10000009
    LL dp[N];
    int main()
    {
        dp[0]=1;dp[1]=1;dp[2]=2;
        for(int i=3;i<N;i++)
        {
            if(i%2) dp[i]=dp[i/2];
            else dp[i]=dp[i/2]+dp[i/2-1];
        }
        int T,n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("%lld
    ",dp[n]);
        }
        return 0;
    }
  • 相关阅读:
    五,系统操作命令说明
    三,linux系统的由来
    二,服务器磁盘阵列(raid)
    一服务器硬件介绍
    四,元组类型
    集合类型
    字典类型
    三,列表类型
    二,字符串类型
    一,数字类型
  • 原文地址:https://www.cnblogs.com/a719525932/p/6726219.html
Copyright © 2011-2022 走看看