码迷,mamicode.com
首页 > 其他好文 > 详细

cf1280B——分类讨论+模拟

时间:2019-12-27 19:53:22      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:开始   continue   out   ++   def   puts   ems   cout   i++   

一开始想复杂了,然后写了一大堆代码,其实2的情况是判一下四个角,再判一下每一行每一列即可

/*
结果必定<=4
0:所有人都是A
1:边界一整行都是A
2:非边界一整行/列都是A,
    角落是A 
3:剩余情况 
4:A被P包围
不可能:都是P 
*/
#include<bits/stdc++.h>
using namespace std;
#define N 105

int r,c;
char mp[N][N]; 


int main(){
    int t;cin>>t;while(t--){
        cin>>r>>c;
        int flag1=0,flag2=0; 
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++){
                cin>>mp[i][j];
                if(mp[i][j]==P)flag1=1;
                if(mp[i][j]==A)flag2=1;
            }
        if(!flag1){cout<<0<<\n;continue;}
        if(!flag2){cout<<"MORTAL"<<\n;continue;}
        
        //1
        int f=0;
        for(int i=1;i<=r;i++)if(mp[i][1]==P)f=1;
        if(!f){puts("1");continue;}
        f=0;
        for(int i=1;i<=r;i++)if(mp[i][c]==P)f=1;
        if(!f){puts("1");continue;}
        f=0;
        for(int i=1;i<=c;i++)if(mp[1][i]==P)f=1;
        if(!f){puts("1");continue;}
        f=0;
        for(int i=1;i<=c;i++)if(mp[r][i]==P)f=1;
        if(!f){puts("1");continue;}
        
        //2
        if(mp[1][1]==A || mp[1][c]==A || mp[r][1]==A || mp[r][c]==A){
            puts("2");continue;
        }
        f=0;
        for(int i=1;i<=r;i++){
            int flag=0;
            for(int j=1;j<=c;j++)if(mp[i][j]==P)flag=1;
            if(!flag)f=1;
        }
        if(f){puts("2");continue;}
        f=0;
        for(int i=1;i<=c;i++){
            int flag=0;
            for(int j=1;j<=r;j++)if(mp[j][i]==P)flag=1;
            if(!flag)f=1;
        }
        if(f){puts("2");continue;}
        
                
        //3
        f=0;
        for(int i=1;i<=r;i++)
            if(mp[i][1]==A || mp[i][c]==A)f=1;
        for(int i=1;i<=c;i++)
            if(mp[1][i]==A || mp[r][i]==A)f=1;
        if(f){puts("3");continue;}
            
        puts("4");
        
        memset(mp,0,sizeof mp);
    }
}

cf1280B——分类讨论+模拟

标签:开始   continue   out   ++   def   puts   ems   cout   i++   

原文地址:https://www.cnblogs.com/zsben991126/p/12109172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!