zoukankan      html  css  js  c++  java
  • codeforces --- Round #250 (Div. 2) B. The Child and Set

    <传送门>

    【题目大意】

    给你一个sum和一个limit,现在要你在1~limit中找到一些数来使得这些数的和等于sum,如果能找到的话就输出找到的数的个数和这些数,未找到输出"-1"。

    比赛的时候被hack了。

    【题目分析】

    这题需要将所有的数的lowbit先求出来,然后按照大小排序,然后从后往前判断,如果这个数小于sum那么这个数就是可以构成sum的数,选进去,完了以后判断sum的值是否为0就可以了。做题的时候没将题目理解透彻。

    #include<bits/stdc++.h>
    #define MAX 100010
    using namespace std;
    struct Node
    {
        int num;
        int id;
        bool vis=0;
    };
    Node node[MAX];
    int sum,limit;
    int lowbit(int x)
    {
        return x&(-x);
    }
    bool cmp(Node a,Node b)
    {
        return a.num<b.num;
    }
    int main()
    {
        scanf("%d%d",&sum,&limit);
        int i,j;
        for(i=1;i<=limit;i++)
        {
            node[i].num=lowbit(i);
            node[i].id=i;
        }
        sort(node+1,node+1+limit,cmp);
        int cnt=0;
        for(i=limit;i>=1;i--)
        {
            if(node[i].num<=sum)
            {
                sum-=node[i].num;
                node[i].vis=1;
                cnt++;
            }
        }
    
        if(sum)
            printf("-1");
        else
        {
            printf("%d
    ",cnt);
            for(i=limit;i>=1;i--)
            {
                if(node[i].vis)
                {
                    printf("%d ",node[i].id);
                }
            }
        }
        putchar(10);
        return 0;
    }
    View Code
  • 相关阅读:
    ubuntu安装-Docker(zz)
    vpp编译
    dpdk编译
    通过P4runtime进行解耦
    run p4 in mininet
    搭建基于Open vSwitch的VxLAN隧道实zz
    路由协议
    dNOS from AT&T
    《Java程序设计》实验一 Java开发环境的熟悉
    《Java程序设计》第五周学习总结
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3768324.html
Copyright © 2011-2022 走看看