• Codeforces Round #234 (Div. 2) A题 (dfs水过)


    //a*b指的是一行b个元素 
    //DFS 
    //如果存在X则有1*12,否则为0,且1,2,3,4,5,6都不存在,如果有一个'O'则12*1不存在 
    //检验b=6时,对每一个ch[i]进行检验,判断ch[i]=='X'且ch[i+6]=='X',如果6不存在的话,2,3一定也不存在(但是代码上没写) 
    
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    int t,ok[6],tmp;
    char ch[13];
    int add[6]={12,6,4,3,2,1};
    
    int dfs(int x,int add){
        
        if(ch[x]!='X')
            return 0;
        if(x+add>12)
            return 1;
        return dfs(x+add,add);
    }
    
    int main (){
        
        cin>>t;
        while(t--){
            cin>>ch;
        
            memset(ok,0,sizeof(ok));
            
            ok[5]=1;
            for(int i=0;i<12;i++)//只要有一个不为X,则ok[5]=0 
                if(ch[i]!='X')
                {
                    ok[5]=0;    
                    break;
                }
            
            for(int i=0;i<12;i++)//只要有一个x 
                if(ch[i]=='X')
                {
                    ok[0]=1;
                    break;
                }
            
            for(int i=1;i<5;i++)
            { 
                
                for(int k=0;k<add[i];k++)
                {
                    if(ch[k]!='X')
                        continue;
                    ok[i]=dfs(k+add[i],add[i]);
                    if(ok[i])
                        break;
                }
            }
            
            int ans=0;
            for(int i=0;i<6;i++)
                if(ok[i])
                    ans++;
            cout<<ans;
            for(int i=0;i<6;i++)
                if(ok[i])
                    cout<<" "<<12/add[i]<<"x"<<add[i];
            cout<<endl;
            
        }
        return 0;
    } 
  • 相关阅读:
    栈及练习
    约瑟夫问题
    双向链表
    链表
    线性表
    高级排序
    建议16:比较函数调用模式
    建议15:推荐动态调用函数
    建议14:灵活使用Arguments
    建议13:禁用Function构造函数
  • 原文地址:https://www.cnblogs.com/neverchanje/p/3583753.html
Copyright © 2020-2023  润新知