刚接触SG函数不久,再次被算法的巧妙震撼到,知道mex、SG函数这道题就是水题了。第一次在sublime text上编译代码,折腾了好久啊。。。不过最终结果还是令人满意的,现在我的sublime text 超好看啊!附图一张~
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=105;
int k,m;
int s[MAXN];
int a[MAXN];
int sg[MAXN*MAXN];
int dfs(int x){
if(sg[x]!=-1) return sg[x];
bool vis[MAXN*2];
memset(vis,false,sizeof vis);
for(int i=0;i<k;++i){
if(x-s[i]>=0) vis[dfs(x-s[i])]=true;
}
for(int i=0;i<MAXN;++i){
if(!vis[i]) return sg[x]=i;
}
}
int main(){
ios::sync_with_stdio(false);
while(cin>>k,k){
memset(sg,-1,sizeof sg);
for(int i=0;i<k;++i){
cin>>s[i];
}
cin>>m;
while(m--){
int n,res=0;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
res^=dfs(a[i]);
}
cout<<(res==0?'L':'W');
}
cout<<endl;
}
return 0;
}