首页 > 其他分享 >题解:CF913D Too Easy Problems

题解:CF913D Too Easy Problems

时间:2024-09-09 21:17:00浏览次数:12  
标签:tmp geq int 题解 Problems mid Easy test con

题意

给定一场考试,考试会持续 \(T\) 毫秒,由 \(n\) 道题目组成,你可以用 \(t_i\) 毫秒解决第 \(i\) 个问题,每个问题给定一个整数 \(a_i\)。

要求你选出一个试题集合 \(S\),若该集合大小为 \(k\),它应满足 \(T\geq\sum_{i\in S}\limits t_i\),你需要最大化 \(\sum_{i\in S}\limits [a_i\geq k]\)。

分析

显然所做的题数就应该是得分,因为不得分的题没有做的必要。

容易发现做的题越多,耗时也越多,同时能够提供分数的题越少,显然有单调性。

考虑二分答案。

我们在钦定了答案 \(k\) 后,只需要将所有的能产生贡献的题目(即 \(a_i\geq k\) 的题目)按时长从小到大排序,然后贪心选取。

时间复杂度 \(O(n\log n)\)。

Code

#include<bits/stdc++.h>
using namespace std;
#define maxn 200005

struct test
{
    int a, t, id;
    test(int A, int T, int I): a(A), t(T), id(I) {}
};

vector<test> con, tmp, ans;

bool chk(int k, int T)
{
    tmp.clear();
    for(auto [a, t, i]:con)
        if(a>=k) tmp.emplace_back(a, t, i);
    sort(tmp.begin(), tmp.end(), [](test &a, test &b){return a.t<b.t;});
    int cnt=0;
    for(auto [a, t, i]:tmp)
    {
        if(T<t) break;
        cnt++, T-=t;
    }
    return cnt>=k;
}

int main()
{
    int n, T;
    cin>>n>>T;
    for(int i=1, a, t;i<=n;i++)
        cin>>a>>t, con.emplace_back(a, t, i);
    int l=0, r=3e5;
    while(l+1<r)
    {
        int mid=(l+r)>>1;
        if(chk(mid, T)) l=mid, ans=tmp;
        else r=mid; 
    }
    cout<<l<<'\n'<<l<<'\n';
    for(int i=0;i<l;i++)
        cout<<ans[i].id<<' ';
}

标签:tmp,geq,int,题解,Problems,mid,Easy,test,con
From: https://www.cnblogs.com/redacted-area/p/18405332

相关文章

  • 题解:P5618 [SDOI2015] 道路修建
    题意给定一个\(2\timesN\)的网格,网格上的点和上下左右连边。要求支持以下几种操作:修改某条边的边权。求满足\(y\in[l,r]\)的点构成的点集的最小生成树。分析这道题的想法和P4246[SHOI2008]堵塞的交通很相似。注意到\(N,M\leq6\times10^4\),并且查询的是......
  • 题解:P6089 [JSOI2015] 非诚勿扰
    分析首先我们要求出对于第\(i\)位女性,她选择每个列表中的男性的概率是多少。第一轮选择第一位的概率为\(p\),选择第二位的概率为\(p(1-p)\),以此类推。显然第一轮选择第\(k\)位的概率为\(p(1-p)^{k-1}\)。假设列表中有\(n\)名男性,那么第二轮选择第一位的概率为\(p(1-p......
  • 题解:P3968 [TJOI2014] 电源插排
    题意维护一个\(01\)串,初始均为\(0\),支持:单点将\(1\)修改为\(0\)。查询区间中\(1\)的个数。查询最长且最靠右的连续\(0\)段的靠右的中点,并将其改为\(1\)。分析第一个操作和第二个操作显然使用动态开点线段树维护。我们只需要解决第三个操作。我们用平衡树存储......
  • CF1621G Weighted Increasing Subsequences 题解
    题目链接点击打开链接题目解法这种题就感觉每一步都不难想,但串在一起就不会显然考虑位置\(x\)作为\(lis\)的一部分,合法的\(lis\)的个数合法的约束是:令\(lis\)的最后一个位置为\(last\),满足\(\max\{a_{last+1},...,a_n\}>a_x\)不难发现,合法的\(last\)是一段区间......
  • 【最新华为OD机试E卷-支持在线评测】通过软盘拷贝文件(200分)多语言题解-(Python/C/Ja
    ......
  • P7230 题解
    P7230思路对每个左端点维护右端点\(res_i\)。操作形如删去一个数再加入一个数。如果删掉\(p\)上的\(a_p\),找到左右最近的\(l,r\)使得\(a_l=a_r=a_p\)。那么\(res_{l+1},\dotsb,res_p\)对\(r\)取max。实际上要维护\(\maxres_i-i+1\),因为\(res_i\)单调,所以相当于......
  • 【题解】Solution Set - NOIP2024集训Day25 概率期望 dp
    【题解】SolutionSet-NOIP2024集训Day25概率期望dphttps://www.becoder.com.cn/contest/5515「QOJ2606」Gachapon\(f_{i,j}\):用一次合法的level-irolling能够抽到的\(j\)的期望个数。\(h_{i,j,k}\):在\(i\)次操作之内,抽到恰好\(k\)个\(j\)的概率。\[h_{i,j,k......
  • 2025超实用的软件EasyRecovery数据恢复工具免费版下载
    ......
  • EasyRecovery2025最新超级好用的电脑数据恢复软件
    亲爱的笔记本小能手们,你们有没有想过,在电脑里辛苦工作了好几个小时的成果,一不小心因为手滑、误操作或是其他原因,突然“噗通”一下不见了?......
  • luogu4198题解
    随机说话这个题做法没见过记一下。我一开始以为是李超树的题,结果把李超树打上之后就不会做了。然后题读错了写了一个弱化版。题目分析做法参考这个题题意只是假装是一个有关线段的题。简化之后的题意如下。有一个初始都为\(0\)的实数数列,每一次会修改位置\(x\)的数为......