8.03 又写模拟写哭了的牛客8
G-Game SET
题意
给定一些卡片。一张卡片有 4 个属性,每个属性有 4 种样式,用 1 、2 、3 、 * 表示。 * 可以替换为 1 、2 、3 的任意一个。定义一个卡片集为 3 张每个属性样式全一样或者全不一样的卡片,找出给定卡片的任意卡片集。
思路
暴力可以过,那就非常简单呗
再也不想写模拟了,真的恶心
代码
代码语言:javascript复制#include<bits/stdc .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=(s); i<(e); i)
using namespace std;
char s[100];
int vis[5][300];
int solve(int cas){
pf("Case #%d: ",cas); mst(vis,0);
int n,ff(0); sc(n); rep(i,1,n 1){
scs(s 1); int len=strlen(s 1);
int cnt(0); string t="";
rep(j,1,len 1){
if(s[j]=='[') continue;
if(s[j]==']'){
if(cnt==0){
if(t=="*") vis[cnt][i]=-1;
else if(t=="one") vis[cnt][i]=1;
else if(t=="two") vis[cnt][i]=2;
else if(t=="three") vis[cnt][i]=3;
}
else if(cnt==1){
if(t=="*") vis[cnt][i]=-1;
else if(t=="diamond") vis[cnt][i]=1;
else if(t=="squiggle") vis[cnt][i]=2;
else if(t=="oval") vis[cnt][i]=3;
}
else if(cnt==2){
if(t=="*") vis[cnt][i]=-1;
else if(t=="solid") vis[cnt][i]=1;
else if(t=="striped") vis[cnt][i]=2;
else if(t=="open") vis[cnt][i]=3;
}
else if(cnt==3){
if(t=="*") vis[cnt][i]=-1;
else if(t=="red") vis[cnt][i]=1;
else if(t=="green") vis[cnt][i]=2;
else if(t=="purple") vis[cnt][i]=3;
}
t=""; cnt ;
continue;
}
t =s[j];
}
}
rep(i,1,n 1) rep(j,i 1,n 1) rep(k,j 1,n 1){
int fl[4]; mst(fl,0); rep(u,0,4){
if(vis[u][i]==-1||vis[u][j]==-1||vis[u][k]==-1){ fl[u]=1; continue; }
else if(vis[u][i]==vis[u][j]&&vis[u][j]==vis[u][k]){ fl[u]=1; continue; }
else if(vis[u][i]!=vis[u][j]&&vis[u][j]!=vis[u][k]&&vis[u][i]!=vis[u][k]){ fl[u]=1; continue; }
} if(fl[0] fl[1] fl[2] fl[3]==4) return pf("%d %d %dn",i,j,k);
}
return pf("-1n");
}
int main(){
int _,cas(0); sc(_); while(_--) solve( cas);
}