zoukankan      html  css  js  c++  java
  • CodeForces 699B One Bomb

    把每一个墙的位置都存下来。

    如果墙的个数$sz>n+m$,显然无解。

    否则枚举炸哪一行,假设枚举炸第$i$行,去掉第$i$行的所有墙,看剩下的墙是否处于同一列,如果是,那么这就是一个解。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-8;
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    template <class T>
    inline void read(T &x)
    {
        char c = getchar(); x = 0;while(!isdigit(c)) c = getchar();
        while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar();  }
    }
    
    const int maxn=1010;
    char s[maxn][maxn];
    struct X{ int r,c; }t[maxn*maxn];
    int n,m,sz,f[maxn];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++) scanf("%s",s[i]); sz=0;
        for(int i=0;i<n;i++) for(int j=0;j<=m;j++)
            if(s[i][j]=='*') t[sz].r=i,t[sz].c=j,sz++;
    
        if(sz>n+m) printf("NO
    ");
        else
        {
            bool fail=1;
            for(int i=0;i<n;i++)
            {
                int ansR=i,ansC=0;
                memset(f,0,sizeof f);
                for(int j=0;j<sz;j++) { if(t[j].r==i) continue; f[t[j].c]=1; }
                int sum=0; for(int j=0;j<m;j++) { if(f[j]==0) continue; ansC=j; sum=sum+f[j]; }
                if(sum>=2) continue; 
                fail=0; printf("YES
    "); 
                printf("%d %d
    ",ansR+1,ansC+1); break;
            }
            if(fail) printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    作业三3
    作业三2(改过)
    第一章
    实验2
    第三章
    例2-11
    例2-10
    例2-8
    例2-9
    例2-7
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5800976.html
Copyright © 2011-2022 走看看