Sequential Nim

Sequential Nim

题目

There are n piles of stones, where the i-th pile has ai stones. Two people play a game, where they take alternating turns removing stones.

In a move, a player may remove a positive number of stones from the first non-empty pile (the pile with the minimal index, that has at least one stone). The first player who cannot make a move (because all piles are empty) loses the game. If both players play optimally, determine the winner of the game.

Input
The first line contains a single integer t (1≤t≤1000) — the number of test cases. Next 2t lines contain descriptions of test cases.

The first line of each test case contains a single integer n (1≤n≤105) — the number of piles.

The second line of each test case contains n integers a1,…,an (1≤ai≤109) — ai is equal to the number of stones in the i-th pile.

It is guaranteed that the sum of n for all test cases does not exceed 105.

Output
For each test case, if the player who makes the first move will win, output “First”. Otherwise, output “Second”.

Example
Input
7
3
2 5 4
8
1 1 1 1 1 1 1 1
6
1 2 3 4 5 6
6
1 1 2 1 2 2
1
1000000000
5
1 2 2 1 1
3
1 1 1
Output
First
Second
Second
First
First
Second
First
Note
In the first test case, the first player will win the game. His winning strategy is:

The first player should take the stones from the first pile. He will take 1 stone. The numbers of stones in piles will be [1,5,4].
The second player should take the stones from the first pile. He will take 1 stone because he can’t take any other number of stones. The numbers of stones in piles will be [0,5,4].
The first player should take the stones from the second pile because the first pile is empty. He will take 4 stones. The numbers of stones in piles will be [0,1,4].
The second player should take the stones from the second pile because the first pile is empty. He will take 1 stone because he can’t take any other number of stones. The numbers of stones in piles will be [0,0,4].
The first player should take the stones from the third pile because the first and second piles are empty. He will take 4 stones. The numbers of stones in piles will be [0,0,0].
The second player will lose the game because all piles will be empty.

解释

参考了一些博客

  • 在一个大于1的堆中,全部拿完,那先手赢
  • 在两个都大于1的堆中,先手在第一堆拿到剩下一个,然后后手必须拿那最后一个,先手再拿第二堆的全部,先手赢

这里相当于是不出现1的情况下,先手能够控制胜负
如果出现一个1,那么,其实就是让先手后手的控制权交换,直到,出现非1的堆,

如果出现非1的堆,它后面无论是1还是不是1,那控制权不变

简单讲,规律大概是:
从左往右扫描,如果出现一个非1的数,那统计这个数前面是1的堆的数量n,n是偶数,那就是先手赢,奇数就是后手赢
如果全部都是1,那么n是偶数是后手赢,奇数则是先手

代码

#include<bits/stdc++.h>
using namespace std;
int cb[1000000];
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
    	int n,x = 0,sum = 0;
    	cin>>n;
    	for(int i=0 ; i<n ; i++){
    		cin>>cb[i];
    		if(cb[i] == 1 && x == 0){
    			sum++;
			}else{
				x++;
			}
		}
		if(x == 0)sum++;
    	if(sum%2 == 0 ){
    		printf("First\n");
		}else{
			printf("Second\n");
		}
	}
    return 0;
}

参考:
https://blog.csdn.net/jziwjxjd/article/details/107503632

猜你喜欢

转载自blog.csdn.net/Dueser/article/details/109051785
Nim