ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

三体攻击(蓝桥杯省赛2018C/C++A组第七题) 暴力

2022-02-07 16:34:54  阅读:197  来源: 互联网

标签:ch 读取 int 三体 atk C++ 蓝桥 getInt getchar


题目:

题目描述:略

输入输出样例

示例

输入

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

思路:

暴力破解:

  1. 读懂题意(难点)
  2. 给每个战舰(i, j, k)赋于生命值d(i, j ,k)
  3. 循环m轮攻击,每轮攻击相当于防御值d(i, j ,k)down操作,直到防御值 d(i, j ,k) < 0时终止输出结果。

问题:

  1. 如何表示三维数据呢
    因为C++三维数组使用麻烦,所以将其转为一维数组进行处理。
  2. 如何快速读取行数据(int)呢

代码:

#include<bits/stdc++.h>
using namespace std;
int A,B,C,m;

//快速读取输入
int getInt(){
   //getchar():一次读取一个字节,输入数据一次缓存,多次读取,加快数据读取速度
    char ch = getchar();
    int x=0,f=1;
    //去掉该层while好像也能得出正确结果,因为输入的数据没有负数
    while(ch < '0' || ch > '9'){
        if(ch == '-'){
            f = -1;
            ch = getchar();
        }
    }
    
    while(ch >= '0' && ch <='9'){
        //ch - '0'将ASCII值转成十进制值
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return  x*f;
}


//三维数据转为一维数据
int getindex(int i, int j, int k){
    return ((i - 1) * B + (j -1))*C + k;
}

int main(){
    //快速读取
    A = getInt();
    B = getInt();
    C = getInt();
    m = getInt();
    
    // 用于存放三维数据,即小方格的生命值属性d(i,j,k)
    int *data = new int[A * B * C + 1];

    // 用于存放三体人每轮的攻击力参数
    int (*atk)[7] = new int[m + 1][7];
    
    //赋值给d(i,j,k)
    for(int i = 1;i <= A;i++){
        for(int j = 1; j <= B;j++){
            for(int k = 1;k <= C; k++){
                data[getindex(i,j,k)] = getInt();  
            }
        }
    }
    
    //战舰被攻击
    for(int i = 1; i <= m; i++){
        //7个参数赋值
        for(int j = 0;j < 7 ;j++){
            atk[i][j] = getInt();
        }
        
        //进行比较
        for(int x = atk[i][0];x <= atk[i][1];x++){
            for(int y = atk[i][2]; y <= atk[i][3];y++){
                for(int z = atk[i][4];z <= atk[i][5]; z++){
                    data[getindex(x,y,z)] -= atk[i][6];  
                    if(data[getindex(x,y,z)] < 0){
                        cout<<i<<endl;
                        delete []data;
                        delete []atk;
                        return 0;
                    }
                }
            }
        }
        
    }
    
    return 0;
}

总结:

1.一二维数组的声明与初始化赋值
2. 快速读取模板
3. c++三维数组转一维数组
4. getchar()函数的使用

标签:ch,读取,int,三体,atk,C++,蓝桥,getInt,getchar
来源: https://blog.csdn.net/weixin_40934238/article/details/122808045

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有