码迷,mamicode.com
首页 > 其他好文 > 详细

P3619 魔法

时间:2019-09-25 01:09:02      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:copy   read   data   sort   ring   data-   line   任务   name   

题目背景

http://baike.baidu.com/link?url=7tOqn6wVEwR6CB61TcpypU23obcxnhOX4HNkyMtV57pBZ8_8tXRQARdLAJ_OPmvoGwBPvpeT9l-vgMGqFoaBRD1PDF74WWcWanNHkJZ6HMnkIhmiXgpmyloUeRZ_AE3A

题目描述

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

输入格式

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

对于每个测试点

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

接下来n行,每行2个数字,ti与bi

输出格式

对于每个测试点,输出+1s或者-1s

输入输出样例

输入 #1
1
2 13
1 -9
5 -3
输出 #1
+1s

说明/提示

对于20%的数据,n≤10

对于100%的数据,n≤100,000,Z≤10,ti,T≤100,000,−100,000≤bi≤100,000

By:lantian

 

贪心再加上结构体排序,以耗时少中加的最多为优先排。

 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define MAXN 2147483647

using namespace std;
struct node{
    int tim;
    int b;
}a[100010];

struct ss{
    int tim;
    int b;
}f[100010];

int n,t,z,i,j;

inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch<0||ch>9){
        if(ch==-){
            w=-1;
        }
        ch=getchar();
    }
    while(ch>=0&&ch<=9){
        s=s*10+ch-0;
        ch=getchar();
    }
    return s*w;
}

int cmp(node &a,node &b){
    return a.tim<b.tim;
}

int comp(ss &a,ss &b){
    return a.b+a.tim>b.b+b.tim;
}

int main(){
    z=read();
    for(i=1;i<=z;i++){
        int s=0,cnt=0,num=0;
        n=read();
        t=read();
        for(j=1;j<=n;j++){
            int x,y;
            x=read();
            y=read();
            if(y>0){
                a[++cnt].tim=x;
                a[cnt].b=y;
            }
            else{
                f[++num].tim=x;
                f[num].b=y;
            }
        }
        sort(a+1,a+cnt+1,cmp);
        sort(f+1,f+num+1,comp);
        for(j=1;j<=cnt;j++){
            if(t>a[j].tim){
                t+=a[j].b;
            }
            else{
                s=1;
                break;
            }
        }
        for(j=1;j<=num;j++){
            if(t>f[j].tim){
                t+=f[j].b;
            }
            else{
                s=1;
                break;
            }
            if(t<=0){
                s=1;
                break;
            }
        }
        if(s==0){
            printf("+1s\n");
        }
        else{
            printf("-1s\n");
        }
    }
    return 0;
}

 

P3619 魔法

标签:copy   read   data   sort   ring   data-   line   任务   name   

原文地址:https://www.cnblogs.com/hrj1/p/11581953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!