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
  • 相关阅读:
    053-509
    053-298
    053-255
    css实现省略号
    github上写blog
    解决内容被挤压缩小问题
    request.getRequestDispather().forward()与response.sendRedirect()
    资料,来自HTML5前端开发学习⑤群
    checkbox与jq<转>2
    checkbox与jq<转>
  • 原文地址:https://www.cnblogs.com/crazyacking/p/3768324.html
Copyright © 2011-2022 走看看