首页 > 代码库 > 毁灭者问题
毁灭者问题
毁灭者问题
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位。
毁灭者的核心技能之一,叫做魔法吸收(Absorb Mana):
现在让我们来考虑下面的问题:
假设你拥有 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 非降。
输出
输出一行一个整数表示毁灭者一共吸收了多少法力。
- 样例输入
50 10 10 12 10 20 10 12 10 10 125 1 519 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 }
运行效果:
毁灭者问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。