蓝桥杯2018-省赛-C/C++-A组7题

空扰寡人 提交于 2020-02-10 20:31:33

不是满分解答,后面补上,之前提交的一部分题也是,后面会慢慢补上

题目
标题:三体攻击

【题目描述】
三体人将对地球发起攻击。为了抵御攻击,地球人派出了 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消耗  < 2000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。

提交程序时,注意选择所期望的语言类型和编译器类型。

代码

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 using namespace std;
 6 int main(){
 7     int a,b,c,t;
 8     cin>>a>>b>>c>>t;
 9     int arr[a+1][b+1][c+1];
10     for(int i=1;i<=a;i++){
11         for(int j=1;j<=b;j++){
12             for(int k=1;k<=c;k++){
13                 cin>>arr[i][j][k];
14             }
15         }
16     }
17     int lat,rat,lbt,rbt,lct,rct,ht;
18     int shot,flag=0;
19     int rt=t;
20     while(t--){
21         scanf("%d%d%d%d%d%d%d",&lat,&rat,&lbt,&rbt,&lct,&rct,&ht);
22         for(int i=1;i<=a;i++){
23             //cout<<"a";
24             for(int j=1;j<=b;j++){
25                 //cout<<"b";
26                 for(int k=1;k<=c;k++){
27                     //cout<<"c"<<endl; 
28                     //cout<<i<<" "<<j<<" "<<k<<endl;
29                     //cout<<"a"<<lat<<" "<<rat<<" "<<i<<endl;
30                     if(lat<=i&&i<=rat){
31                         //cout<<"b"<<lbt<<" "<<rbt<<" "<<j<<endl;
32                         if(lbt<=j&&j<=rbt){
33                             //cout<<"c"<<lct<<" "<<rct<<" "<<k<<endl;
34                             if(lct<=k&&k<=rct){
35                                 arr[i][j][k]=arr[i][j][k]-ht;
36                                 //cout<<arr[i][j][k]<<endl;
37                                 if(arr[i][j][k]<0&&!flag)
38                                 {
39                                     shot=rt-t;
40                                     flag=1;
41                                 }
42                             }
43                         }
44                     }
45                 }
46             }
47         }
48         //cout<<endl;
49         /*
50         for(int i=1;i<=a;i++){
51             for(int j=1;j<=b;j++){
52                 for(int k=1;k<=c;k++){
53                     cout<<arr[i][j][k]<<" ";
54                 }
55             }
56         }
57         */
58     }
59     cout<<shot<<endl;
60     
61     
62 } 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!