canuc80k5300·1/50

Nước Đi Cuối Cùng

Nộp bài trên LQDOJ

Bài 53 · Sprague Grundy Theorem

Hai người chơi luân phiên trên một dãy đống sỏi. Trong một lượt, người chơi chọn đúng một đống còn sỏi và lấy khỏi đống đó một số lượng dương tùy ý. Người không thể thực hiện lượt đi sẽ thua.

Với mỗi ván ban đầu, hãy xác định người chơi thứ nhất hay người chơi thứ hai có chiến lược thắng khi cả hai đều chơi tối ưu.

Input

  • Dòng đầu chứa số nguyên , là số ván.
  • Mỗi ván gồm hai dòng:
  • Dòng thứ nhất chứa số nguyên , là số đống sỏi.
  • Dòng thứ hai chứa số nguyên , trong đó là số sỏi của đống thứ .

Output

  • Với mỗi ván, in first nếu người chơi thứ nhất thắng; ngược lại in second.

Constraints

  • .
  • cho mỗi ván.
  • .
  • Tổng của tất cả các ván không vượt quá .

Scoring

  • Subtask ( số điểm): , tổng và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3
3
2 5 7
4
1 4 6 8
1
9

Output

second
first
first

Giải thích: Ở ván đầu, nên mọi nước đi đều trao cho đối thủ một vị trí thắng. Hai ván còn lại có xor khác , vì vậy người đi trước có thể đưa xor về và buộc mình thực hiện nước cuối.

Lời giải tóm tắt
  • Ý tưởng: \
  • Phân tích: Mỗi đống là một trò chơi con độc lập. Với một đống có x viên, người chơi có thể đưa nó tới mọi kích thước từ 0 đến x-1, nên Grundy của đống đúng bằng x. Theo định lý Sprague-Grundy, Grundy của toàn bộ vị trí là xor kích thước các đống.
  • Thuật toán: Với mỗi ván, xor toàn bộ a_i. In first nếu kết quả khác 0, ngược lại in second.
  • Chứng minh đúng: Nếu xor bằng 0, thay một đống x bởi một giá trị nhỏ hơn luôn làm xor khác 0, nên mọi nước đi đều trao vị trí thắng cho đối thủ. Nếu xor khác 0, chọn bit cao nhất của xor; tồn tại một đống x chứa bit đó và giá trị y = x xor xor_total thỏa y < x. Giảm đống này xuống y làm xor mới bằng 0. Vì vậy tiêu chuẩn của thuật toán là cần và đủ.
  • Độ phức tạp: Mỗi ván dùng O(n) thời gian và O(1) bộ nhớ phụ.