zoukankan      html  css  js  c++  java
  • P3619 魔法

    题目背景

    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
    ");
            }
            else{
                printf("-1s
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    IDE警告信息不应该被忽略
    C#委托使用:多播 ,向委托注册多个方法
    C# random生成随机数全部一样
    使用dynamic动态设置属性值与反射设置属性值性能对比
    git基本使用
    sql server多数据库查询 远程数据库查询
    C# mvc统一通道使用过滤器
    拼凑json的实例
    java常考小程序
    几个触发器的实例
  • 原文地址:https://www.cnblogs.com/hrj1/p/11581953.html
Copyright © 2011-2022 走看看