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