zoukankan      html  css  js  c++  java
  • 洛谷-10进军苏联-[再也不坑]【*2】*系列2:狼烟四起

    题目背景 Background

    元首怒了!!
     题目描述 Description
    自从德军撕毁条约进攻苏联后,斯大林一直怏怏不悦,最近又有人来报,敌军在某山区埋了很多地雷,为了保证不误伤,德军将地雷按二维坐标排列。
    如果按照每个已知地雷位置为原点构造坐标系,那么两个地雷的坐标轴相交的地方就可能出现地雷,现在请你计算最多可能有的地雷数。
    举例,如果如下图:
    #################
    ####$############
    #################
    ###########$#####
    #################
    井号表示未知区域,dollar号表示已知地雷,如果如上图已知两个雷,那么:
    #################
    ####$######*#####
    #################
    ####*######$#####
    #################
    输出可能存在雷区如上图*

    现在你需要根据以上规律找出所有可能存在雷区,将其标识为*,再输出
     输入输出格式 Input/output
    输入格式:
    输入两个数x,y,表示矩阵长(横)与宽(纵),第二行一个矩阵,包含#与$
    输出格式:
    输出一个矩阵,表示已知和可能存在雷区,输完矩阵后,再输出一个数,表示最多存在地雷
     输入输出样例 Sample input/output
    样例测试点#1

    输入样例:

    20 6

    ####################
    ####$###############
    ####################
    ###########$########
    ####################
    ##############$#####
    输出样例:

    ####################
    ####$######*##*#####
    ####################
    ####*######$##*#####
    ####################
    ####*######*##$#####
    9

    思路:这题呢,十分简单,果然是水题啊。。。

    从样例中不难分析出,每个'*'的坐标是每个'$'除了它本身之外的纵坐标与其他'$'的横坐标。

    比如样例中给出的三个'$'的坐标为:①(5,5)②(12,3)③(15,1)

    其他六个'*'的坐标为:①(5,1)②(5,3)③(12,1)④(12,5)⑤(15,3)⑥(15,5)

    不难发现,'*'坐标是'$'的纵坐标与其他$'的横坐标

    那么这题就好办了,上代码!

    代码如下:

     1 #include <stdio.h>
     2 int main()
     3 {
     4     char a[300][300];
     5     int b[300][2],ans=0;//存储坐标 
     6     int n,m,i,j,k=0;
     7     scanf("%d%d",&n,&m);
     8     getchar();
     9     for(i=0;i<m;i++)//输入地图 
    10     {
    11         scanf("%s",a[i]);
    12     }    
    13     for(i=0;i<m;i++)
    14     {
    15         for(j=0;j<n;j++)
    16         {
    17             if(a[i][j]=='$')//存储已知地雷坐标 
    18             {
    19                 b[k][0]=i;//纵坐标 
    20                 b[k][1]=j;//横坐标 
    21                 k++;
    22             }
    23         }
    24     } 
    25     for(i=0;i<k;i++)
    26     {
    27         for(j=0;j<k;j++)
    28         {
    29             if(i!=j)
    30             {
    31                 a[b[i][0]][b[j][1]]='*';//标记为地雷 
    32                 ans++;//地雷数++ 
    33             }        
    34         }        
    35     }
    36     for(i=0;i<m;i++)
    37     {
    38         printf("%s
    ",a[i]);        
    39     }
    40     printf("%d
    ",ans+k);//先前的地雷加上统计的地雷 
    41     return 0;
    42 }
  • 相关阅读:
    BZOJ 1257 [CQOI2007]余数之和sum | 数论
    【模板】网络流-最大流模板(Dinic)
    BZOJ 3230 相似子串 | 后缀数组 二分 ST表
    BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题
    后缀数组模板(全注释)
    BZOJ 3190 赛车 | 计算几何
    BZOJ 1007 水平可见直线 | 计算几何
    BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划
    BZOJ 2527 Meteors | 整体二分
  • 原文地址:https://www.cnblogs.com/geek-007/p/4667862.html
Copyright © 2011-2022 走看看