• 毁灭者问题


     毁灭者问题

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位。

    毁灭者的核心技能之一,叫做魔法吸收(Absorb Mana):

    14054064004625.png

    现在让我们来考虑下面的问题:

    假设你拥有 n 个魔法单位,他们从左到有站在一行,编号从 1 到 n。 每个单位拥有三项属性:

    • si: 初始法力。

    • mi: 最大法力上限。

    • ri: 每秒中法力回复速度。

    现在你操纵一个毁灭者,有 m 个操作,t l r,表示时刻 t,毁灭者对所有编号从 l 到 r 的单位,使用了魔法吸收。操作按照时间顺序给出,计算毁灭者一共吸收了多少法力。

    输入

    输入数据的第一行有一个整数 n(1 ≤  n ≤105) — 你的魔法单位的数目。

    接下来的 n 行,每行有三个整数 si, mi, ri(0 ≤ si ≤ mi ≤ 105, 0 ≤ ri ≤ 105) 描述一个魔法单位。

    接下来一行又一个整数 m(1 ≤ m ≤ 105), — 操作的数目。

    接下来的 m 行,每行描述一个操作 t, l, r(0 ≤ t ≤ 109, 1 ≤ l ≤ r ≤ n),t 非降。

    输出

    输出一行一个整数表示毁灭者一共吸收了多少法力。

    样例输入
    5
    0 10 1
    0 12 1
    0 20 1
    0 12 1
    0 10 1
    2
    5 1 5
    19 1 5
    代码:
     1 import java.util.Scanner;
     2 
     3 
     4 public class Destroyer {
     5     
     6     
     7     
     8     public static void main(String argv[]){
     9         
    10         Scanner br=new Scanner(System.in);
    11         // 获取魔法单位数据
    12         int n=Integer.parseInt(br.nextLine());    
    13         int energy=0;
    14         String[] N=new String[n];
    15         for(int i=0;i<n;i++){
    16             
    17             N[i]=br.nextLine();
    18             
    19         }
    20         
    21         //获取操作组
    22         int m=Integer.parseInt(br.nextLine());
    23         String[] M=new String[m];
    24         for(int i=0;i<m;i++){
    25             
    26             M[i]=br.nextLine();
    27             
    28         }
    29         br.close();
    30         
    31         //数据转化为魔法单位对象组
    32         Mor[] Mer=new Mor[n];
    33         for(int i=0;i<n;i++){
    34             String[] List=N[i].split(" ");
    35             Mer[i]=new Mor(Integer.parseInt(List[0]),Integer.parseInt(List[1]),Integer.parseInt(List[2]));
    36             //System.out.println(Mer[i].s+Mer[i].speed+Mer[i].max);
    37         }
    38         
    39         //数据转化为操作对象组
    40         Mov[] Mver=new Mov[m];
    41         for(int i=0;i<m;i++){
    42             String[] List_v=M[i].split(" ");
    43             Mver[i]=new Mov(Integer.parseInt(List_v[0]),Integer.parseInt(List_v[1]),Integer.parseInt(List_v[2]));
    44             //System.out.println(Mver[i].time+Mver[i].first+Mver[i].end);
    45         }
    46         
    47         //时间修为时间段
    48         for(int i=m-1; i>=1;i--){
    49             
    50             Mver[i].time=Mver[i].time-Mver[i-1].time;
    51             
    52         }
    53         
    54         //计算吸取魔法
    55         for (int i=0;i<m;i++){       
    56             //计算每个操作的吸取魔法数
    57             for(int j=0;j<n;j++){
    58                 Mer[j].s=Mer[j].s+Mer[j].speed*Mver[i].time;
    59                 if(Mer[j].s>=Mer[j].max)
    60                     Mer[j].s=Mer[j].max;     //魔法数不可超过最大值
    61                 if(j+1<=Mver[i].end && j+1>=Mver[i].first){
    62                     energy=energy+Mer[j].s;    //魔法被吸取干净
    63                     Mer[j].s=0;
    64                     //System.out.println(energy);
    65                 }
    66                     
    67             }
    68         }
    69         System.out.println(energy); //输出吸取的魔法值
    70         
    71     }
    72 
    73 }
    74 
    75 //定义魔法单位对象
    76 class Mor{
    77     
    78     int s;
    79     int speed;
    80     int max;
    81     Mor(int a,int b,int c){
    82         this.s=a;
    83         this.speed=c;
    84         this.max=b;
    85     }
    86 }
    87 //定义操作对象
    88 class Mov{
    89     
    90     int time;
    91     int first;
    92     int end;
    93     Mov(int a,int b,int c){
    94         this.time=a;
    95         this.first=b;
    96         this.end=c;
    97     }
    98 }

    运行效果:

     
  • 相关阅读:
    纯jq编写增删改,弹出框
    li颜色特效
    省市联动Demo
    button轮番点击,只点击一次,鼠标hover
    正则--密码强度验证
    正则--验证邮箱与手机号
    正则表达式--元字符
    C#电脑自动关机代码指令
    1.ASP.NET MVC使用EPPlus,导出数据到Excel中
    6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
  • 原文地址:https://www.cnblogs.com/udld/p/4192326.html
Copyright © 2020-2023  润新知