zoj 2058 The Archaeologist's Trouble II

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2058

一道简单的找规律题。

每一行中的两个相邻字符必定不同。 

行从1开始,偶数行的'@'和'*'必定各占一半,奇数行分两种情况,若不全为'?',此行中第一个不为'?'的字符及其下标的奇偶决定'@'个数,若为'@'且下标为奇则'@'为i/2+1,反则为i/2。

code:

#include<cstdio>
#include<iostream>
#include<cstring>
using  namespace std ;
char str[ 105][ 105] ;
int vis[ 105] ;
int main(){
     int n, i, j, min, max ;
     while(~scanf( " %d ", &n)&&n>= 0){
        memset(vis,  0sizeof(vis)) ;
        min = max =  0 ;
        getchar() ;
         for(i= 1; i<=n; i++)
            cin >> str[i]+ 1 ;
         for(i= 1; i<=n; i++){
             if(!(i% 2)){
                min += i /  2, max += i /  2 ;
                 continue ;
            }
             for(j= 1; j<=i; j++){
                 if(str[i][j]!= ' ? '&&!vis[i]){
                    vis[i] =  1 ;
                     if(str[i][j]== ' * '){
                         if(j% 2) min += i /  2, max += i /  2 ;
                         else    min += i /  2 +  1, max += i /  2 +  1 ;
                    } else{
                         if(j% 2) min += i /  2 +  1, max += i /  2 +  1 ;
                         else    min += i /  2 , max += i /  2 ;
                    }
                }
            }
             if(!vis[i])min += i /  2, max += i /  2 +  1 ;
        }
        printf( " %d %d\n ", max, min) ;
    }
     return  0 ;} 

你可能感兴趣的:(log)