2020牛客暑期多校训练营(第八场)Game SET

传送门:Game SET

题意

一套牌有四种属性,每种属性都有三种特征,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。
如果遇到了 * ,如果另外两张相同,那么 * 可以和它们相同,否则和它们都不同,所以该属性只要有一个 * 符合条件。
如果没有 * ,就要么全都相同,要么全都不同符合条件。

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3  
 4 map<string,int>p;
 5 int a[10010][10];
 6  
 7 int main()
 8 {
 9     p["*"]=0;
10     p["one"]=1;
11     p["two"]=2;
12     p["three"]=3;
13     p["diamond"]=1;
14     p["squiggle"]=2;
15     p["oval"]=3;
16     p["solid"]=1;
17     p["striped"]=2;
18     p["open"]=3;
19     p["red"]=1;
20     p["green"]=2;
21     p["purple"]=3;
22  
23     int t;
24     int tt=1;
25     cin>>t;
26     while(t--){
27         int n;
28         cin>>n;
29         string s;
30         for(int i=0;i<n;i++){
31             cin>>s;
32             string ss;
33             int cnt=0;
34             for(int j=0;j<s.size();j++){
35                 if(s[j]=='[') ss="",cnt++;
36                 else if(s[j]==']') a[i+1][cnt]=p[ss];
37                 else ss+=s[j];
38             }
39         }
40         cout<<"Case #"<<tt++<<": ";
41         int flag=0;
42         for(int i=1;i<=n;i++){
43             for(int j=i+1;j<=n;j++){
44                 for(int k=j+1;k<=n;k++){
45                     int g=0;
46                     for(int l=1;l<=4;l++){
47                         if(a[i][l]==0||a[j][l]==0||a[k][l]==0) continue;
48                         if(a[i][l]==a[j][l]&&a[i][l]==a[k][l]) continue;
49                         if(a[i][l]!=a[k][l]&&a[i][l]!=a[j][l]&&a[j][l]!=a[k][l]) continue;
50                         g=1;
51                         break;
52                     }
53                     if(!g){
54                         cout<<i<<' '<<j<<' '<<k<<endl;
55                         flag=1;
56                     }
57                     if(flag) break;
58                 }
59                 if(flag) break;
60             }
61             if(flag) break;
62         }
63         if(!flag) cout<<-1<<endl;
64     }
65     return 0;
66 }

 

posted @ 2020-08-03 23:19  只能过样例嘤嘤嘤  阅读(208)  评论(0编辑  收藏  举报

……