zoukankan      html  css  js  c++  java
  • PTA 7-1 大炮打蚊子 (15 分)

    现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:

     O
    OXO
     O

    其中,X为炮弹落点中心,O为紧靠中心的四个有杀伤力的格子范围。若蚊子被炮弹命中(位于X格),一击毙命,若仅被杀伤(位于O格),则损失一半的生命力。也就是说,一次命中或者两次杀伤均可消灭蚊子。现在给出蚊子的分布情况以及连续k发炮弹的落点,给出每炮消灭的蚊子数。

    输入格式:

    第一行为两个不超过20的正整数MN,中间空一格,表示二维平面有M行、N列。

    接下来M行,每行有N0或者#字符,其中#表示所在格子有蚊子。

    接下来一行,包含一个不超过400的正整数k,表示发射炮弹的数量。

    最后k行,每行包括一发炮弹的整数坐标xy(0x<M,0y<N),之间用一个空格间隔。

    输出格式:

    对应输入的k发炮弹,输出共有k行,第i行即第i发炮弹消灭的蚊子数。

    输入样例:

    5 6
    00#00#
    000###
    00#000
    000000
    00#000
    2
    1 2
    1 4

    输出样例:

    0
    2

    思路: 打到的点标记为0 ,旁边的点减一,统计一下死掉的蚊子数量就行了

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int nums[200][200];
        memset(nums,0,sizeof(nums));
        int M , N ;
        cin>>M>>N;
        getchar();
        char c ;
        for(int i = 0; i < M ; i++){
            for(int j = 0 ; j < N ; j++){
                cin>>c;
                if(c == '0')
                    nums[i][j] = 0;
                else
                    nums[i][j] = 2;// 满血的蚊子    
            }
        }
        int k;
        cin>>k;
        int x , y ;
        while(k--){
            cin>>x>>y;
            int sum = 0 ; // 打死的蚊子的数量
            if(nums[x][y]!=0){
                sum++;
                nums[x][y] = 0 ;
            } 
            // 下面四个if 是四个方位的蚊子 
            if((x-1>=0) && nums[x-1][y] != 0 ){
                if(nums[x-1][y] == 1 ){
                    sum++;
                    nums[x-1][y] = 0 ;
                }
                else if(nums[x-1][y] == 2){
                    nums[x-1][y]--;
                }
            }
            if((x+1 < M) && nums[x+1][y] != 0){
                if(nums[x+1][y] == 1 ){
                    sum++;
                    nums[x+1][y] = 0 ;
                }
                else if(nums[x+1][y] == 2){
                    nums[x+1][y]--;
                }
            }
            if((y+1 < N) && nums[x][y+1] != 0){
                if(nums[x][y+1] == 1 ){
                    sum++;
                    nums[x][y+1] = 0 ;
                }
                else if(nums[x][y+1] == 2){
                    nums[x][y+1]--;
                }
            } 
            if((y-1 >= 0) && nums[x][y-1] != 0){
                if(nums[x][y-1] == 1 ){
                    sum++;
                    nums[x][y-1] = 0 ;
                }
                else if(nums[x][y-1] == 2){
                    nums[x][y-1]--;
                }
            } 
            cout<<sum<<endl;
        }
        
        return 0;
    } 
  • 相关阅读:
    JMeter4.0的单机压测和集群压测简介
    接口自动化测试,完整入门篇
    jmeter实战---正则提取器
    压测必经之路,解读JMeter分布式
    JMeter线程组参数含义
    jmeter生成HTML性能测试报告
    SPP-Net、Atrous Convolution以及ASPP by Rose
    使用CNN进行角度估计
    Java相关书籍分享
    Code Conventions for the Java
  • 原文地址:https://www.cnblogs.com/Li-ningning/p/14622137.html
Copyright © 2011-2022 走看看