POJ 2960 S-nim (SG function)

Source: Internet
Author: User

S-nim
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 3694 Accepted: 1936

Description

Arthur and his sister Caroll has been playing a game called Nim for some time now. Nim is played as follows:
    • The starting position have a number of heaps, all containing some, not necessarily equal, number of beads.
    • The players take turns chosing a heap and removing a positive number of beads from it.
    • The first player isn't able to make a move, loses.
Arthur and Caroll really enjoyed playing this simple game until they
Recently learned an easy-to-always-be able-to-find the best move:
    • Xor the number of beads in the heaps in the current position (i.e. if we have 2, 4 and 7 The xor-sum would be 1 as 2 XOR 4 XOR 7 = 1).
    • If The xor-sum is 0, too bad, you'll lose.
    • Otherwise, move such that the xor-sum becomes 0. This was always possible.
It's quite easy-to-convince oneself that's this works. Consider these facts:
    • The player is takes the last bead wins.
    • After the winning player's last move the xor-sum would be 0.
    • The xor-sum would change after every move.
Which means that if you do sure that the xor-sum always was 0 when you had made your move, your opponent would never be a Ble to win, and, thus, you'll win.

Understandibly It is no play a game when both players know how to play perfectly (ignorance is bliss). Fourtunately, Arthur and Caroll soon came up with a similar game, S-nim, which seemed to solve this problem. Each player was now only allowed to remove a number of beads in some predefined set S, e.g. if we had s = {2, 5} each play Er is only allowed to remove 2 or 5 beads. Now it isn't always possible to make the xor-sum 0 and, thus, the strategy above is useless. Or is it?

Your job is to write a program this determines if a position of S-nim is a losing or a winning position. A position is a winning position if there are at least one move to a losing position. A position is a losing position if there be no moves to a losing position. This means, as expected, which a position with no legal moves is a losing position.

Input

Input consists of a number of test cases.
For each test case:the first line contains a number k (0 < k≤100) describing the size of S, followed by K numbers si (0 < si≤10000) describing S. The second line contains a number m (0 < m≤100) describing the number of positions to evaluate. The next m lines each contain a number L (0 < l≤100) describing the number of heaps and L numbers hi (0≤hi≤10000) Describing the number of beads in the heaps.
The last test case was followed by a 0 on a line of its own.

Output

For each position:if the described position is a winning position print a ' W '. If the described position is a losing position print a ' L '.
Print a newline after all test case.

Sample Input

2 2 532 5 123 2 4 74 2 3 7 125 1 2 3 4 532 5 123 2 4 74 2 3 7 120

Sample Output

Lwwwwl

Source

Svenskt Mästerskap I Programmering/norgesmesterskapet 2004

Ideas

sg function.

Bare Ti, note the size of SG and Vis is good:)

Code

1#include <cstdio>2#include <cstring>3 #definefor (A,B,C) for (int a= (b);a< (c); a++)4 using namespacestd;5 6 intn,m,a[101],sg[10001];7 8 intDfsintx) {9     if(sg[x]!=-1)returnSg[x];Ten     if(!x)returnsg[x]=0; One     intvis[10001];//size of [si] Amemset (Vis,0,sizeof(Vis)); -for (I,0, N) -         if(X>=a[i]) Vis[dfs (X-a[i])]=1; the      for(intI=0;; i++) -         if(!vis[i])returnsg[x]=i; - } -  + intMain () { -      while(SCANF ("%d", &n) = =1&&N) { +for (I,0, N) scanf ("%d",&a[i]); Ascanf"%d",&m); atmemset (sg,-1,sizeof(SG)); -for (I,0, M) { -             intx,v,ans=0; -scanf"%d",&x); -For (J,0, X) -scanf"%d", &v), ans^=Dfs (v); in             if(ANS) printf ("W"); -             Elseprintf"L"); to         } +Putchar ('\ n'); -     } the     return 0; *}

POJ 2960 S-nim (SG function)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.