zoukankan      html  css  js  c++  java
  • 【贪心】10.24assassin


    题目分析

    没有题目分析……

    寄存一下神奇反悔贪心

     1 #include<bits/stdc++.h>
     2 const int maxn = 100035;
     3 
     4 struct node
     5 {
     6     int a,b;
     7     node(int x=0, int y=0):a(x),b(y) {}
     8     bool operator < (node x) const
     9     {
    10         return a < x.a;
    11     }
    12 }a[maxn],b[maxn];
    13 int T,n,m,mn,tot;
    14 int mx,ans,cnt1,cnt2;
    15 
    16 int read()
    17 {
    18     char ch = getchar();
    19     int num = 0;
    20     bool fl = 0;
    21     for (; !isdigit(ch); ch=getchar())
    22         if (ch=='-') fl = 1;
    23     for (; isdigit(ch); ch=getchar())
    24         num = (num<<1)+(num<<3)+ch-48;
    25     if (fl) num = -num;
    26     return num;
    27 }
    28 int main()
    29 {
    30     freopen("assassin.in","r",stdin);
    31     freopen("assassin.out","w",stdout);
    32     T = read();
    33     while (T--)
    34     {
    35         n = read(), m = read();
    36         cnt1 = cnt2 = mx = ans = tot = 0, mn = m+1;
    37         for (int i=1; i<=n; i++)
    38         {
    39             int x = read(), y = read();
    40             if (y) a[++cnt1] = node(x, y), mn = std::min(mn, x), tot += y;
    41             else b[++cnt2] = node(x, y);
    42         }
    43         std::sort(a+1, a+cnt1+1);
    44         std::sort(b+1, b+cnt2+1);
    45         if (m >= mn){
    46             mx = tot+1, ans = mn;
    47             if (mx >= n){
    48                 printf("%d %d
    ",n,mn);
    49                 continue;
    50             }
    51             cnt2 -= mx-cnt1;
    52             for (int i=2; i<=cnt1; i++) b[++cnt2] = a[i];
    53             std::sort(b+1, b+cnt2+1);
    54             for (int i=1; i<=cnt2&&mx<n; i++)
    55                 if (ans+b[i].a <= m) mx++, ans += b[i].a;
    56                 else break;
    57             printf("%d %d
    ",mx,ans);
    58         }else{
    59             mx = 0;
    60             for (int i=1; i<=cnt2; i++)
    61                 if (b[i].a <= m) m -= b[i].a, mx++, ans += b[i].a;
    62             printf("%d %d
    ",mx,ans);
    63         }
    64     }
    65     return 0;
    66 }

    END

  • 相关阅读:
    【Spring Framework】10、代理模式
    【Spring Framework】8、使用注解开发
    Codeforces 516E
    AtCoder Grand Contest 055 题解
    Codeforces 1606F
    贪心/构造/DP 杂题选做
    整数拆分最大乘积
    CSP-S2021 被碾压记
    洛谷 P2791
    LCT 小记
  • 原文地址:https://www.cnblogs.com/antiquality/p/9845230.html
Copyright © 2011-2022 走看看