Game SET

Game SET

https://ac.nowcoder.com/acm/contest/5673/G

题意

一套牌有四种属性,每种属性都有三种特征,shapes (one, two, or three), shape (diamond, squiggle, or oval), shading (solid, striped, or open),  color (red, green, or purple),如果是*,可以选任意一种。给出n套牌,每套牌给出[<number>][<shape>][<shading>][<color>],问有没有三张牌符合同一属性的特征要么全都相同,要么全都不同。

题解

暴力瞎搞就好了,这应该才是签到题吧....
先用map将字符串转换为数字记录下每张牌的四种属性,然后三个循环找三张牌,遍历属性,如果全都符合条件就输出三张牌的编号,如果没有符合条件的就输出-1。
如果遇到了 * ,如果另外两张相同,那么 * 可以和它们相同,否则和它们都不同,所以该属性只要有一个 * 符合条件。
如果没有 * ,就要么全都相同,要么全都不同符合条件。

代码

#include<bits/stdc++.h>
using namespace std;

map<string,int>p;
int a[10010][10];

int main()
{
    p["*"]=0;
    p["one"]=1;
    p["two"]=2;
    p["three"]=3;
    p["diamond"]=1;
    p["squiggle"]=2;
    p["oval"]=3;
    p["solid"]=1;
    p["striped"]=2;
    p["open"]=3;
    p["red"]=1;
    p["green"]=2;
    p["purple"]=3;

    int t;
    int tt=1;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        string s;
        for(int i=0;i<n;i++){
            cin>>s;
            string ss;
            int cnt=0;
            for(int j=0;j<s.size();j++){
                if(s[j]=='[') ss="",cnt++;
                else if(s[j]==']') a[i+1][cnt]=p[ss];
                else ss+=s[j];
            }
        }
        cout<<"Case #"<<tt++<<": ";
        int flag=0;
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                for(int k=j+1;k<=n;k++){
                    int g=0;
                    for(int l=1;l<=4;l++){
                        if(a[i][l]==0||a[j][l]==0||a[k][l]==0) continue;
                        if(a[i][l]==a[j][l]&&a[i][l]==a[k][l]) continue;
                        if(a[i][l]!=a[k][l]&&a[i][l]!=a[j][l]&&a[j][l]!=a[k][l]) continue;
                        g=1;
                        break;
                    }
                    if(!g){
                        cout<<i<<' '<<j<<' '<<k<<endl;
                        flag=1;
                    }
                    if(flag) break;
                }
                if(flag) break;
            }
            if(flag) break;
        }
        if(!flag) cout<<-1<<endl;
    }
    return 0;
}


全部评论

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务