zoukankan      html  css  js  c++  java
  • hdu 5491 The Next

    Problem Description
    Let L denote the number of 1s in integer D’s binary representation. Given two integers S1 and S2, we call D a WYH number if S1LS2.
    With a given D, we would like to find the next WYH number Y, which is JUST larger than D. In other words, Y is the smallest WYH number among the numbers larger than D. Please write a program to solve this problem.
     
    Input
    The first line of input contains a number T indicating the number of test cases (T300000).
    Each test case consists of three integers DS1, and S2, as described above. It is guaranteed that 0D<231 and D is a WYH number.
     
    Output
    For each test case, output a single line consisting of “Case #X: Y”. X is the test case number starting from 1. Y is the next WYH number.
     
    Sample Input
    3 11 2 4 22 3 3 15 2 5
     
    Sample Output
    Case #1: 12 Case #2: 25 Case #3: 17
     
    Source

     暴力枚举  不多说

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int oo = 1e9;
    const double PI = acos(-1);
    const int N = 1e3;
    int binary[N], one, k;
    void get(LL n)
    {
        one = k = 0;
        while(n)
        {
            if(n % 2 == 1)
            {
                binary[k] = 1;
                one++;
            }
            else binary[k] = 0;
            k++;
            n /= 2;
        }
        k--;
    }
    int main()
    {
        int T, s1, s2, L, cas=1;
        LL ans;
        scanf("%d", &T);
        while(T--)
        {
            memset(binary, 0, sizeof(binary));
            scanf("%d %d %d", &L, &s1, &s2);
            ans = L;
            do
            {
                ans ++;
                get(ans);
                if(one < s1)
                {
                    int j = s1 - one, id=0;
                    while(j)
                    {
                        if(binary[id] == 0)
                        {
                            binary[id] = 1;
                            j--;
                        }
                        id++;
                    }
                    break;
                }
    
            }while(one < s1 || one > s2);
            ans = 0;
            
            for(int i = k; i >= 0; i--)
                ans = ans * 2 + binary[i];
    
            printf("Case #%d: %lld
    ", cas++, ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/PersistFaith/p/4844424.html
Copyright © 2011-2022 走看看