zoukankan      html  css  js  c++  java
  • Codeforces Round #683 (Div. 2, by Meet IT) C

    Codeforces Round #683 (Div. 2, by Meet IT) C

    大意

    (n) 个物品,每个重量为 (w_i) ,有一个承重容量 (W) 的背包。

    是否存在一种选择物品的方案,让背包中物品重量满足 (lceil frac{W}{2} ceil le C le W)

    存在输出物品个数和选择物品的编号,不存在输出 (-1)

    思路

    记录物品编号的情况下按重量排序。

    二分查找 (lceil frac{W}{2} ceil)

    如果存在 (i) 满足 (w_i le W) ,显然只用选一个。

    否则只能选择一串 (w_i < lceil frac{W}{2} ceil) 的物品。

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define cint const int&
    #define Pi acos(-1)
    
    const int mod = 998244353;
    const int inf_int = 0x7fffffff;
    const ll inf_ll = 0x7fffffffffffffff;
    const double ept = 1e-9;
    
    int t, n;
    ll w;
    int q[200200], cnt;
    
    struct stu {
        ll x;
        int id;
        void init(cint i) {
            cin >> x;
            id = i;
        }
        bool operator < (const stu&a) const {return x < a.x;}
    }a[200200];
        
    int main() {
        ios::sync_with_stdio(false);
        cin >> t;
        while(t--) {
            cnt = 0;
            cin >> n >> w;
            for(int i=1; i<=n; i++) a[i].init(i);
            sort(a+1, a+1+n);
            stu tt = {(w+1ll)/2ll, 0};
            int k = lower_bound(a+1, a+1+n, tt) - a;
            if(a[k].x <= w && k <= n) {
                cout << 1 << endl;
                cout << a[k].id << endl;
                continue;
            }
    
            --k;
            ll tmp=0;
            bool st=0;
            while(k) {
                tmp += a[k].x;
                q[++cnt] = a[k].id;
                if(tmp >= (w+1ll)/2ll) {
                    st=1;
                    cout << cnt << endl;
                    while(cnt) {cout << q[cnt--] << ' ';}
                    cout << endl;
                    break;
                }
                k--;
            }
            if(!st) cout << -1 << endl;
        }
        return 0;
    }
    
  • 相关阅读:
    SpringBoot中添加事务
    隐藏样式
    Mybatis配置解析
    题目1064:反序数------玩转小聪明
    题目1063:整数和
    题目1062:分段函数23333333333333
    题目1060:完数VS盈数------这题做得我想骂人
    题目1059:abc----------就喜欢这样的题
    题目1050:完数-----------runtime error的问题
    题目1049:字符串去特定字符
  • 原文地址:https://www.cnblogs.com/ullio/p/14015353.html
Copyright © 2011-2022 走看看