zoukankan      html  css  js  c++  java
  • Java实现第九届蓝桥杯三体攻击

    三体攻击

    【题目描述】
    三体人将对地球发起攻击。为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体。其中,第 i 层第 j 行第 k 列的战舰(记为战舰 (i, j, k))的生命值为 d(i, j, k)。

    三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有战舰都造成相同的伤害。具体地,第 t 轮攻击用 7 个参数 lat, rat, lbt, rbt, lct, rct, ht 描述;
    所有满足 i ∈ [lat, rat],j ∈ [lbt, rbt],k ∈ [lct, rct] 的战舰 (i, j, k) 会受到 ht 的伤害。如果一个战舰累计受到的总伤害超过其防御力,那么这个战舰会爆炸。

    地球指挥官希望你能告诉他,第一艘爆炸的战舰是在哪一轮攻击后爆炸的。

    【输入格式】
    从标准输入读入数据。
    第一行包括 4 个正整数 A, B, C, m;
    第二行包含 A × B × C 个整数,其中第 ((i − 1)×B + (j − 1)) × C + (k − 1)+1 个数为 d(i, j, k);
    第 3 到第 m + 2 行中,第 (t − 2) 行包含 7 个正整数 lat, rat, lbt, rbt, lct, rct, ht。

    【输出格式】
    输出到标准输出。
    输出第一个爆炸的战舰是在哪一轮攻击后爆炸的。保证一定存在这样的战舰。

    【样例输入】
    2 2 2 3
    1 1 1 1 1 1 1 1
    1 2 1 2 1 1 1
    1 1 1 2 1 2 1
    1 1 1 1 1 1 2

    【样例输出】
    2

    【样例解释】
    在第 2 轮攻击后,战舰 (1,1,1) 总共受到了 2 点伤害,超出其防御力导致爆炸。

    【数据约定】
    对于 10% 的数据,B = C = 1;
    对于 20% 的数据,C = 1;
    对于 40% 的数据,A × B × C, m ≤ 10, 000;
    对于 70% 的数据,A, B, C ≤ 200;
    对于所有数据,A × B × C ≤ 10^6, m ≤ 10^6, 0 ≤ d(i, j, k), ht ≤ 10^9。

    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗 < 3000ms

    import java.util.Scanner;
    
    /**
     * https://www.cnblogs.com/scx2015noip-as-php/p/2018_10_18.html
     * 
     * @description TODO
     * @author frontier
     * @time 2019年3月13日 下午8:34:15
     *
     */
    public class 编程7三体攻击 {
    
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int a, b, c, m;
    		a = input.nextInt();
    		b = input.nextInt();
    		c = input.nextInt();
    		m = input.nextInt();
    		int[][][] martix = new int[a + 1][b + 1][c + 1];
    
    		for (int i = 1; i <= a; ++i)
    			for (int j = 1; j <= b; ++j)
    				for (int k = 1; k <= c; ++k)
    					martix[i][j][k] = input.nextInt();
    
    		int lat, rat, lbt, rbt, lct, rct, ht;
    		int flag = 0;
    		for (int p = 1; p <= m; ++p) {
    			lat = input.nextInt();
    			rat = input.nextInt();
    			lbt = input.nextInt();
    			rbt = input.nextInt();
    			lct = input.nextInt();
    			rct = input.nextInt();
    			ht = input.nextInt();
    			for (int i = lat; i <= rat; ++i)
    				for (int j = lbt; j <= rbt; ++j)
    					for (int k = lct; k <= rct; ++k) {
    						martix[i][j][k] -= ht;
    						if (martix[i][j][k] < 0) {
    							flag = p;
    							break;
    						}
    					}
    
    			if (flag != 0)
    				break;
    		}
    		System.out.println(flag);
    	}
    }
    
    
    
  • 相关阅读:
    POJ 2240 Arbitrage spfa 判正环
    POJ 3259 Wormholes spfa 判负环
    POJ1680 Currency Exchange SPFA判正环
    HDU5649 DZY Loves Sorting 线段树
    HDU 5648 DZY Loves Math 暴力打表
    HDU5647 DZY Loves Connecting 树形DP
    CDOJ 1071 秋实大哥下棋 线段树
    HDU5046 Airport dancing links 重复覆盖+二分
    HDU 3335 Divisibility dancing links 重复覆盖
    FZU1686 神龙的难题 dancing links 重复覆盖
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077630.html
Copyright © 2011-2022 走看看