这是一个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 }