P3619 魔法 洛谷 题解
魔法
题目描述
cjwssb 知道是误会之后,跟你道了歉。你为了逗笑他,准备和他一起开始魔法。不过你的时间不多了,但是更惨的是你还需要完成
输入格式
第一行:一个整数
对于每个测试点:
第一行:两个整数
接下来
输出格式
对于每个测试点,输出
样例 #1
样例输入 #1
1 2 13 1 -9 5 -3
样例输出 #1
+1s
提示
对于
对于
By lantian
题目大意
给定一个时间
注意!完成任务不消耗时间! 。
询问在
思路
贪心,将任务分成两部分,一部分是
1 2 4 4 -1 3 -4
如果还按照第一种方式排序,会先完成最后一项任务,导致无法完成第一项任务而输出
最后由于要求
#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; }
后记
最开始以为是道水题,结果码力不够打了好一会儿
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!