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; }

浙公网安备 33010602011771号