トピックリンク:
http://acm.hdu.edu.cn/showproblem.php?pid=1850
リンクを説明します。
https://www.cnblogs.com/jiangjun/archive/2012/11/01/2749937.html
効果の件名:
;カードの各山の数は、Ni(i = 1 ... M)となりましたトランプヒープMがあるテーブルの上:ここでは、小さな二つのゲームがあり 、 2つのテイクが点灯し、すべてのステップは、任意に選択し、それらの束を削除することができますすべてのカード、すべての光を取るためにテーブルの上にポーカー、ゲームオーバーです。カードの勝者を取るために最後の一人。
:今、私たちは最終的には、上の手が勝者であるか負である勉強したくない、私はちょうどお聞きしたい
「?人々は、上側の手を獲得したい場合は、いくつかのオプションが最初のステップがあるんです。」 -
入力
テストケースを複数備えた入力データは、二行、最初の整数M(1 <Mを<= 100)を含む行を表す各試験は、Mの整数をニッケル(1 <=を含む行に続く、スタックのトランプカードの数を示しますNI <= 1000000、I = 1 ... M)、Mは、トランプの各スタックの数を表します。M 0は、入力データの終わりを示します。
出力
あなただけの人が勝つために取得した場合、してください出力彼の計画の最初のステップの生の数、それ以外の場合は出力0、インスタンスごとに出力行。
具体的なアイデア:
まず、状態の特定の種類、この状態は故障する運命にある(A、B、C)^ B ^ C == 0のために。だから我々は、すべてのn 3の状態とみなすことができ、それが想定されます(<B <C)、Cもしそうであれば(^ - B A)> 0、そして私たちは、この時間を保証することができます
勝利。
ACコード:
1つの#include <ビット/ STDC ++ H>
2 使用して 名前空間STDを、
3位LL定義長い 長い
4位LSON Lを、中間、RTを定義<< 1
5#定義rsonミッド+ 1、R、RT << 1 | 1
6位INF定義0x3f3f3f3f
7 のconst int型 MAXN = 2E5 + 100 。
8 INT [MAXN]。
9 INT メイン(){
10 INT N。
11 一方(〜のscanf(" %d個"、&N)&& N){
12 INTの和= 0 。
13 のために(int型 i = 1 ; iが++; iが<= N){scanf関数(" %のD "、および[I]);和^ = [I];}
14 INT ANS = 0 。
15 のためには、(int型 I = 1 <; iがN ++ = iは{)
16 であれば([I](和^ [I]))ANS ++> 。
17 }
18のprintf(" %Dを\ n " 、ANS)。
19 }
20 リターン 0 。
21 }