P3619 魔法 洛谷 题解

news/2025/11/7 8:47:07/文章来源:https://www.cnblogs.com/123lbh321/p/18675600

魔法

题目描述

cjwssb 知道是误会之后,跟你道了歉。你为了逗笑他,准备和他一起开始魔法。不过你的时间不多了,但是更惨的是你还需要完成 \(n\) 个魔法任务。假设你当前的时间为 \(T\),每个任务需要有一定的限制 \(t_i\) 表示只有当你的 \(T\) 严格大于 \(t_i\) 时你才能完成这个任务,完成任务并不需要消耗时间。当你完成第 \(i\) 个任务时,你的时间 \(T\) 会加上 \(b_i\),此时要保证 \(T\) 在任何时刻都大于 \(0\),那么请问你是否能完成这 \(n\) 个魔法任务,如果可以,输出 \(\texttt{+1}\texttt{s}\),如果不行,输出 \(\texttt{-1}\texttt{s}\)

输入格式

第一行:一个整数 \(Z\),表示有 \(Z\) 个测试点。

对于每个测试点:

第一行:两个整数 \(n,T\),表示有 \(n\) 个任务,你一开始有 \(T\) 的时间。

接下来 \(n\) 行,每行 \(2\) 个数字,\(t_i\)\(b_i\)

输出格式

对于每个测试点,输出 \(\texttt{+1}\texttt{s}\) 或者 \(\texttt{-1}\texttt{s}\)

样例 #1

样例输入 #1

1
2 13
1 -9
5 -3

样例输出 #1

+1s

提示

对于 \(20\%\) 的数据,\(n\leq10\)

对于 \(100\%\) 的数据,\(n\leq10^5,Z\leq10,t_i\leq10^5,T\leq10^5,-10^5\leq b_i\leq 10^5\)

By lantian

\(\LaTeX\) By ⚡炭治郎⚡

题目大意

给定一个时间\(T\),要完成\(n\)个任务,每个任务两个量,一个是\(t_i\),一个是\(b_i\)
\(t_i\)是当\(T\)严格大于\(t_i(\)\(t_i\leq T)\)时可以完成本任务 。

\((\)注意!完成任务不消耗时间!\()\)

\(b_i\)是完成任务后所加的时间。
询问在\(T\)大于零的情况下能否能完成所有任务,能输出\(+1s\),不能输出\(-1s\)

思路

贪心,将任务分成两部分,一部分是\(b_i>0\)的,另一部分是\(b_i\leq0\)的,如果是第一部分直接按照\(t_i\)从小到大排序,然后进行模拟,有无法完成的就输出\(-1s\),如果是第二部分,按照\(b_i+t_i\)从大到小进行排序,为什么呢?看下面一组样例:

1
2 4
4 -1
3 -4

如果还按照第一种方式排序,会先完成最后一项任务,导致无法完成第一项任务而输出\(-1s\),但是本样例是输出\(+1s\)的,而按照\(b_i+t_i\)从大到小进行排序就可以避免出错。
最后由于要求\(T\)始终大于\(0\),所以在模拟第二部分的数时加一个\(T\)是否大于\(0\)的特判,不满足就输出\(-1s\)

\(CODE:\)

#include<bits/stdc++.h>
using namespace std;
struct node{long long w,v;
}a[100001],b[100001];
int cmp(node x,node y){return x.v<y.v;
}
int cmp1(node x,node y){return x.w+x.v>y.w+y.v;
}
int idx,idy;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);long long tt,n,m;cin>>tt;while(tt--){for(int i=1;i<=idx;i++){a[i].w=0;a[i].v=0;}for(int i=1;i<=idy;i++){b[i].w=0;b[i].v=0;}idx=0;idy=0;cin>>n>>m;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;if(y>0){a[++idx].w=x;a[idx].v=y;}else{b[++idy].w=x;b[idy].v=y;}}sort(a+1,a+idx+1,cmp);sort(b+1,b+idy+1,cmp1);int t=0;for(int i=1;i<=idx;i++){if(a[i].w>=m){cout<<"-1s"<<"\n";t=1;break;}else{m+=a[i].v;}}if(t){continue;}for(int i=1;i<=idy;i++){if(b[i].w>=m){cout<<"-1s"<<"\n";t=1;break;}else{m+=b[i].v;}if(m<=0){cout<<"-1s"<<"\n";t=1;break;}}if(t){continue;}cout<<"+1s"<<"\n";}return 0;
}

后记

最开始以为是道水题,结果码力不够打了好一会儿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABC 337 G(主席树)

最近刚学完主席树,找了道题巩固一下,还是非常有收获的。 题目链接:problem 若只让求\(f(1)\),则还是比较简单的——用权值树状数组维护\(dfs\)路径上的数,每次查一下在 递归路径中\(>\)当前结点值 的结点数量,累加起来即为\(f(1)\)。 可是题目要求将\(f(1)到f(n)\)全部…

python中的列表和元组

列表(List) 可变性:列表是可变的(mutable),这意味着你可以在创建列表后添加、删除或更改其中的元素。 定义方式:使用方括号 [] 来定义一个列表 my_list = [1, 2, 3, "apple", "banana"] 操作:可以对列表执行多种操作,如追加、插入、删除等。 追加…

使用 Python 实现验证码自动识别

验证码在防止自动化攻击中扮演了重要角色,而使用 OCR(光学字符识别)技术可以实现对验证码内容的自动解析和提取。在本文中,我们将使用 Python 结合 Tesseract OCR 来完成英文数字验证码的识别任务。 环境配置 安装 Python 和依赖库 首先,确保您已经安装了 Python。若尚未安…

企业管理与架构

今天聊聊企业架构与DDD如何进行融合 企业架构TOGAF什么是企业架构TOGAF?TOGAF(The Open Group Architecture Framework)是一个广泛采用的企业架构(Enterprise Architecture, EA)框架,由开放组(The Open Group)开发和维护 它为组织设计、规划、实施和治理企业信息架构提…

P2042 [NOI2005] 维护数列

P2042 [NOI2005] 维护数列 请写一个程序,要求维护一个数列,支持以下 \(6\) 种操作:编号 名称 格式 说明1 插入 \(\operatorname{INSERT}\ posi \ tot \ c_1 \ c_2 \cdots c_{tot}\) 在当前数列的第 \(posi\) 个数字后插入 \(tot\) 个数字:\(c_1, c_2 \cdots c_{tot}\);若在…

P1110 [ZJOI2007] 报表统计

P1110 [ZJOI2007] 报表统计 题目描述 小 Q 的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小 Q 希望可以帮妈妈分担一些工作,作为她的生日礼物之一。 经过仔细观察,小 Q 发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作。 在最开…

D2000的RTL8211F的LED灯控制

1、配置打开 edk2-for-support/PhytiumPkg/PhytiumD2000Pkg/PhytiumD2000Pkg.dscDEFINE GMAC_ENABLE = TRUE 2.uefi 界面要打开网络,否则驱动 DwEmacSnpDxe.efi不能运行

使用 Python 实现验证码识别的简单教程

验证码是用于验证用户是否为机器人的重要工具。在本教程中,我们将利用 Python 和 Tesseract OCR 引擎编写一个程序,用于识别英文和数字组成的验证码。通过适当的图像预处理,我们可以有效地提高识别的准确性。环境配置更多内容访问ttocr.com或联系1436423940 安装 Python 和必…