• 【模拟】Codeforces 699B One Bomb


    题目链接:

      http://codeforces.com/problemset/problem/699/B

    题目大意:

      N*M的图,*代表墙.代表空地。问能否在任意位置(可以是墙上)放一枚炸弹(能炸所在行和列),把所有的墙都炸掉。输出答案(不唯一)。

    题目思路:

      【模拟】

      N2预处理出每一行能炸多少墙,每一列能炸多少墙。再N2枚举放炸弹的位置看能炸掉的墙数目是否等于总数。注意如果炸弹位置上有墙要-1。

     1 //
     2 //by coolxxx
     3 ////<bits/stdc++.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<string>
     7 #include<iomanip>
     8 #include<map>
     9 #include<memory.h>
    10 #include<time.h>
    11 #include<stdio.h>
    12 #include<stdlib.h>
    13 #include<string.h>
    14 //#include<stdbool.h>
    15 #include<math.h>
    16 #define min(a,b) ((a)<(b)?(a):(b))
    17 #define max(a,b) ((a)>(b)?(a):(b))
    18 #define abs(a) ((a)>0?(a):(-(a)))
    19 #define lowbit(a) (a&(-a))
    20 #define sqr(a) ((a)*(a))
    21 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
    22 #define mem(a,b) memset(a,b,sizeof(a))
    23 #define eps (1e-8)
    24 #define J 10
    25 #define MAX 0x7f7f7f7f
    26 #define PI 3.14159265358979323
    27 #define N 1004
    28 using namespace std;
    29 typedef long long LL;
    30 int cas,cass;
    31 int n,m,lll,ans;
    32 char ss[N][N];
    33 int a[N],b[N];
    34 void work(int *i,int *j)
    35 {
    36     for((*i)=1;(*i)<=n;(*i)++)
    37     {
    38         for((*j)=1;(*j)<=m;(*j)++)
    39         {
    40             if(a[(*i)]+b[(*j)]-(ss[(*i)][(*j)]=='*')==lll)return;
    41         }
    42     }
    43 }
    44 int main()
    45 {
    46     #ifndef ONLINE_JUDGE
    47     freopen("1.txt","r",stdin);
    48 //    freopen("2.txt","w",stdout);
    49     #endif
    50     int i,j;
    51 //    for(scanf("%d",&cas);cas;cas--)
    52 //    for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
    53     while(~scanf("%d",&n))
    54 //    while(~scanf("%d",&n))
    55     {
    56         scanf("%d",&m);
    57         mem(a,0);mem(b,0);lll=0;
    58         for(i=1;i<=n;i++)
    59         {
    60             scanf("%s",ss[i]+1);
    61         }
    62         for(i=1;i<=n;i++)
    63         {
    64             for(j=1;j<=m;j++)
    65             {
    66                 if(ss[i][j]=='*')a[i]++,b[j]++,lll++;
    67             }
    68         }
    69         work(&i,&j);
    70         if(i>n)puts("NO");
    71         else printf("YES
    %d %d
    ",i,j);
    72     }
    73     return 0;
    74 }
    75 /*
    76 //
    77 
    78 //
    79 */
    View Code
  • 相关阅读:
    给JavaScript初学者的24条最佳实践
    高音符號的由來是怎樣的
    从零单排学JavaWeb
    数据库建表规则
    linux快捷键
    Linux 命令行快捷键
    DC综合及仿真验证和DFT测试
    verilog中include的用法
    <转>verilog hdl中常数声明
    <转>Verilog HDL宏定义define
  • 原文地址:https://www.cnblogs.com/Coolxxx/p/5786028.html
Copyright © 2020-2023  润新知