zoukankan      html  css  js  c++  java
  • 【NOIP2018 模拟】

    A. 【NOIP2018 模拟】剑与魔法

    【问题描述】

    万老师听说某大国很流行穿越,于是他就想写一个关于穿越的剧本。

    闲话休提。话说老师穿越到了某一个剑与魔法的大陆。因为如此这般,所以老师从维娜艾那里得到了预言。老师一共被告知了若干件按顺序结算的 事件。这些事件分为两类:战役事件(CASE)、穿越回去事件(END)。战役事件可以选择是否参加,参加了之后会获得一定的金钱。每个END事件 发生需要至少参加一定数量的战役事件。特别的是,END事件如果满足要求就会强制发生。老师希望在大陆玩个够,所以他要求只有最后一个END事 件会发生。老师希望获得最多的金钱,所以求助于你。

    【输入】

    第一行一个数N,表示输入文件有多少行。 接下来每一行用空格隔开一个字符和一个整数。字符为“c”表示战役事件,接下来的整数表示这次涨RP顺带有多少钱;字符为“e”表示穿越回去 事件,接下来的整数代表至少要涨多少RP。最后一个事件保证是END事件。

    【输出】

    第一行一个整数,最多金钱数目。

    若不可能则输出-1。

    【输入输出样例】

    dragons.in

    5

    c 10

    c 12

    e 2

    c 1

    e 2

    dragons.out

    13

    【数据说明】

    30%的数据满足 N<=20

    60%的数据满足 N<=1,000

    100%的数据满足 N<=200,000

    每次涨RP事件赏金不超过10,000

    穿越事件的要求不超过200,000

     思路:贪心。
    我们可以忽视最后一个 end ,然后一个一个输入数据,将 case 的值 w 存入堆中排序,以后每遇到一个 end 就将堆中元素(最小值)删直要求的最多元素-1,
    循环过后再将堆中元素相加,若堆中元素个数满足最后一个 end 的个数条件,就输出元素之和,反之,输出 -1 .
    code
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 priority_queue<int> q;
     5 int n,x;
     6 
     7 int read(){
     8     int x=0,f=1;
     9     char s=getchar();
    10     while(!isdigit(s)) f*=(s=='-')? -1:1,s=getchar();
    11     do x=(x<<1)+(x<<3)+(s^48),s=getchar();
    12     while(isdigit(s));
    13     return x*f;
    14 }
    15 
    16 int main(){
    17     n=read();
    18     for(int i=1;i<=n;i++){
    19         char s[5];
    20         scanf("%s",s);
    21         x=read();
    22         if(i==n) break;
    23         if(s[0]=='c'){
    24             q.push(-x);
    25         }
    26         else {
    27             while(q.size()>=x)
    28             q.pop();
    29         }
    30     }
    31     int ans=0,num=0;
    32     while(q.size()){
    33         ans-=q.top();
    34         q.pop();
    35         num++;
    36     }
    37     if(num>=x) printf("%d",ans);
    38     else printf("-1");
    39     return 0;
    40 } 
  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/lirh04/p/12314011.html
Copyright © 2011-2022 走看看