这是一个NIM游戏,可以直接通过判断异或操作判断序列{a1,a2,...,an}是否为p-positon(即 a1^a2^...^an),不过因为1=<n<=10^5, mi<=10^16,导致参与异或运算的数会特别多,可以通过(n*4)^(n*4+1)^(n*4+2)^(n*4+3) = 0  ,n属于N。来进行计算优化。

实现代码如下:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static long xor_fn(long val, long l) {
 6         long ans = 0;
 7         for (int i = 0; i < l; i++) {
 8             ans ^= (val + i);
 9         }
10         return ans;
11     }
12 
13     public static void main(String[] args) {
14         Scanner scan = new Scanner(System.in);
15         
16         while (scan.hasNext()) {
17             int n = scan.nextInt();
18             long grundy = 0;
19             for (int i = 0; i < n; i++) {
20                 long ans = 0;
21                 long x = scan.nextLong();
22                 long m = scan.nextLong();
23                 if (m > 6) {
24                     long y = x + m - 1, var = 0, var1 = 0;
25                     if (x % 4 != 0) {
26                         long t = 0;
27                         if (x % 4 == 1)
28                             t = 3;
29                         else if (x % 4 == 2)
30                             t = 2;
31                         else if (x % 4 == 3)
32                             t = 1;
33                         var = xor_fn(x, t);
34                     }
35                     if (y % 4 != 3) {
36                         long k = y % 4 + 1;
37                         var1 = xor_fn(y - k + 1, k);
38                     }
39                     ans = var ^ var1;
40                 } else {
41                     ans = xor_fn(x, m);
42                 }
43                 grundy ^= ans;
44             }
45             System.out.println(((grundy > 0) ? "first" : "second"));
46         }
47         scan.close();
48     }
49 
50 }

 

posted on 2017-04-26 00:13  jade640  阅读(164)  评论(0编辑  收藏  举报