2020牛客多校第八场G题Game SET(暴力枚举阅读理解)

题意:输入n种牌以及牌的属性,任意选3张,这3张满足4种属性,要么全相同,要么全不同,“*”是万能牌,可以变成你想要的任意的牌,输出3张拍的序号。

题解:写一个read函数把[]跳过去读到字符串,再用map把属性映射成0,1,2,3。因为n<256,暴力O(n3),枚举,判断是否符合条件即可。

感觉这题才是签到题qaq,就是英文题目太长。

 

#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
const ll mod =1e9+7;
map<string ,string> ma,mb,mc,md;
inline string read(){
    int x = 0, f = 1;
    string q;
    char ch = getchar();
    while( (ch < 'a' || ch > 'z')&&ch!='*' ){
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while((ch >= 'a' && ch <= 'z') || ch=='*' ){
        q+=ch;
        ch = getchar();
    }
    return q;
}
int main(){
    IOS
    int n,t;
    ma["one"]="1";
    ma["two"]="2";
    ma["three"]="3";
    mb["diamond"]="1";
    mb["squiggle"]="2";
    mb["oval"]="3";
    mc["solid"]="1";
    mc["striped"]="2";
    mc["open"]="3";
    md["red"]="1";
    md["green"]="2";
    md["purple"]="3";
    ma["*"]="0";
    mb["*"]="0";
    mc["*"]="0";
    md["*"]="0";
    scanf("%d",&t);
    int casee=1;
    while(t--){
        scanf("%d",&n);
        vector<string> pp;
        for(int i=0;i<n;i++){
            string s1=read();
            string s2=read();
            string s3=read();
            string s4=read();
            pp.push_back( ma[s1]+mb[s2]+mc[s3]+md[s4]);
        }
        //sort(pp.begin(),pp.end());
//      for(int i=0;i<pp.size();i++){
//          cout<<pp[i]<<endl;
//      }
        int len=pp.size();
        int ans=1;
        for(int i=0;i<len && ans ;i++){
            for(int j=i+1;j<len && ans ;j++){
                for(int k=j+1;k<len && ans;k++){
                    int r;
                    for(r=0;r<4;r++){
                        int flag=0;
                        if( pp[i][r]=='0' && pp[j][r] =='0'){
                            flag=1;
                        }
                        if( pp[k][r]=='0' && pp[j][r] =='0'){
                            flag=1;
                        }
                        if( pp[k][r]=='0' && pp[i][r] =='0'){
                            flag=1;
                        }
                        if((pp[i][r]==pp[j][r]) && pp[k][r]=='0' ){
                            flag=1;
                        }
                        if((pp[j][r]==pp[k][r]) && pp[i][r]=='0' ){
                            flag=1;
                        }
                        if((pp[k][r]==pp[i][r]) && pp[j][r]=='0' ){
                            flag=1;
                        }
                        if((pp[i][r]!=pp[j][r]) && pp[k][r]=='0' ){
                            flag=1;
                        }
                        if((pp[j][r]!=pp[k][r]) && pp[i][r]=='0' ){
                            flag=1;
                        }
                        if((pp[k][r]!=pp[i][r]) && pp[j][r]=='0' ){
                            flag=1;
                        }
                        if( (pp[i][r]==pp[j][r] &&  pp[j][r]== pp[k][r] )|| (pp[i][r]!=pp[j][r] && pp[i][r]!=pp[k][r] &&pp[j][r]!=pp[k][r])){
                            flag=1;
                        }
                        if(flag==0){
                            break;
                        }
                    }
                    if(r==4){
                        ans=0;
                        printf("Case #%d: %d %d %d\n",casee++,i+1,j+1,k+1);
                    }
                         
                      
                }
            }
        }
        if(ans==1){
            printf("Case #%d: -1\n",casee++);
        }
         
    }
    return 0;
}
View Code

 

posted @ 2020-08-03 22:05  杰瑞与汤姆  阅读(146)  评论(0)    收藏  举报