SG函数题,套用标准模板即可。
#include <iostream>
#include <cstring>
using namespace std;
int sg[10005], num[105];
int k;
//计算sg[x]
int getSG(int x)
{
if (sg[x] != -1)
return sg[x];
bool vis[105];
memset(vis, 0, sizeof(vis));
for (int i = 0; i < k; i++)
{
if (x >= num[i])
{
getSG(x - num[i]);
vis[sg[x - num[i]]] = 1;
}
}
for (int i = 0;; i++)
{
if (!vis[i])
{
sg[x] = i;
return sg[x];
}
}
}
int main()
{
while (cin >> k)
{
if (k == 0)
break;
memset(sg, -1, sizeof(sg));
for (int i = 0; i < k; i++)
cin >> num[i];
int m, n, x;
cin >> m;
while (m--)
{
int sum = 0;
cin >> n;
while (n--)
{
cin >> x;
sum ^= getSG(x);
}
if (sum)
cout << "W";
else
cout << "L";
}
cout << endl;
}
return 0;
}
继续加油。