2027-Reading a Chord
問題概要
和音の種類を判定しろ.
解法
最初に全通り生成する.
実装(C++)
#include <algorithm> #include <vector> #include <iostream> #include <cstring> using namespace std; typedef long long int lli; #define REP(i,x) for(int i=0;i<(int)(x);i++) #define rep(i,s,x) for(int i=s;i<(int)(x);i++) #define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++) #define RREP(i,x) for(int i=(x);i>=0;i--) #define RFOR(i,c) for(__typeof((c).rbegin())i=(c).rbegin();i!=(c).rend();i++) string pattern[]={"Rock","Fire","Scissors","Snake","Human","Tree","Wolf","Sponge","Paper","Air","Water","Dragon","Devil","Lightning","Gun"}; int main(){ for(int n;cin>>n,n;){ int v[15],d[15],w[15]; memset(v,0,sizeof(v)); memset(d,0,sizeof(d)); memset(w,0,sizeof(w)); REP(i,n){ string t; cin>>t; int k=find(pattern,pattern+15,t)-pattern; v[k]=1; } REP(i,15){ if(v[i]){ REP(j,7){ d[(i+(j+1)+15)%15]=1; } REP(j,7){ if(v[(i+(j+1)+15)%15]){ w[i]=1; } } } } bool a=false; REP(i,15){ if(v[i]&&d[i]==0&&w[i]){ cout<<pattern[i]<<endl; a=true; break; } } if(!a){ cout<<"Draw"<<endl; } } }