zoukankan      html  css  js  c++  java
  • GirlCat

    GirlCat

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1909    Accepted Submission(s): 1128


    Problem Description
    As a cute girl, Kotori likes playing ``Hide and Seek'' with cats particularly.
    Under the influence of Kotori, many girls and cats are playing ``Hide and Seek'' together.
    Koroti shots a photo. The size of this photo is n×m , each pixel of the photo is a character of the lowercase(from `a' to `z').
    Kotori wants to know how many girls and how many cats are there in the photo.

    We define a girl as -- we choose a point as the start, passing by 4 different connected points continuously, and the four characters are exactly ``girl'' in the order.
    We define two girls are different if there is at least a point of the two girls are different.
    We define a cat as -- we choose a point as the start, passing by 3 different connected points continuously, and the three characters are exactly ``cat'' in the order.
    We define two cats are different if there is at least a point of the two cats are different.

    Two points are regarded to be connected if and only if they share a common edge.
     
    Input
    The first line is an integer T which represents the case number.

    As for each case, the first line are two integers n and m , which are the height and the width of the photo.
    Then there are n lines followed, and there are m characters of each line, which are the the details of the photo.

    It is guaranteed that:
    T is about 50.
    1n1000 .
    1m1000 .
    (n×m)2×106 .
     
    Output
    As for each case, you need to output a single line.
    There should be 2 integers in the line with a blank between them representing the number of girls and cats respectively.

    Please make sure that there is no extra blank.

     
    Sample Input
    3 1 4 girl 2 3 oto cat 3 4 girl hrlt hlca
     
    Sample Output
    1 0 0 2 4 1
    思路:找到g和c开头的dfs就好了。
    #include<bits/stdc++.h>
    #define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
    #define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
    #define PER(i, a, b) for(int i = (a); i >= (b); -- i)
    using namespace std;
    const int maxn=1e5+5;
    template <class T>
    inline void rd(T &ret){
        char c;
        ret = 0;
        while ((c = getchar()) < '0' || c > '9');
        while (c >= '0' && c <= '9'){
            ret = ret * 10 + (c - '0'), c = getchar();
        }
    }
    char str[5][10]={"remove","girl","cat"};
    char p[1005][1005];
    int T,q[5],m,n;
    void dfs(int x,int y,int cnt,int cur){
          if(x<1||y<1||x>n||y>m||p[x][y]!=str[cur][cnt])return;
          if((cur==1&&cnt==3)||(cur==2&&cnt==2)){
                 q[cur]++;
                 return;
          }
          dfs(x+1,y,cnt+1,cur);
          dfs(x,y+1,cnt+1,cur);
          dfs(x-1,y,cnt+1,cur);
          dfs(x,y-1,cnt+1,cur);
    }
    int main()
    {
        rd(T);
        while(T--){
            rd(n),rd(m);
            memset(q,0,sizeof(q));
            for(int i=1;i<=n;i++)scanf("%s",p[i]+1);
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(p[i][j]=='g')dfs(i,j,0,1);
                    if(p[i][j]=='c')dfs(i,j,0,2);
                }
            }
            cout<<q[1]<<' '<<q[2]<<endl;
        }
        return 0;
    }
     
  • 相关阅读:
    Delphi 学习笔记
    Extjs 4
    面向对象(OOP)
    Java基础
    Ubantu(乌班图)
    CentOS 6.3操作常识
    英语音标单元音篇
    英语音标双元音篇
    英语音标辅音篇
    Oracle补习班第一天
  • 原文地址:https://www.cnblogs.com/czy-power/p/10400862.html
Copyright © 2011-2022 走看看