トピックリンク:
https://codeforces.com/contest/1174/problem/D
効果の件名:
あなたのnおよびXは、コンフィギュレーションは、このような任意の異種配列または連続サブとxに等しいゼロではないではないことを確認します。このシーケンス番号の範囲は、あなたはどのくらいの最長のこのシーケンスを尋ね、その後、列を出力する[-1 1、(1個の<< N)]です。
具体的なアイデア:
問題の解決策:https://codeforces.com/blog/entry/67388
第一条件のために、排他的ORの連続的なサブシーケンスのいずれかが0に等しくない任意の2つのプレフィックスがCouchuと全ての連続サブことができるので、排他的OR任意の2つのプレフィックスのゼロに等しくないと等価です。そして、プレフィックスとXORのいずれか2つが0でないことに相当します
そして、任意の2つのプレフィックスが不在に等しいです。
第二の条件については、特に最初の問題解決のアイデアは同じです。任意即ち、排他的論理和xに等しくない2つのプレフィックスの連続したサブシーケンスであり、XORはxに等しくありません。
そこで、我々はすべてのそれの合法性を判断する接頭辞、現在の接頭辞を列挙することができます。
ACコード:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3位LL定義長い 長い 4位INF定義0x3f3f3f3f 5位ll_infを定義する(<< 1LL 60 ) 6位LSON Lを、中間、RTを定義<< 1 7#定義rsonミッド+ 1、R、RT << 1 | 1つの 8 のconst int型 MAXN = 2E6 + 100 。 9 のconst int型 N = 15 。 10 のconst int型 MOD = 1E9 + 7 。 11ベクトル< int型 > Q; 12マップ< int型、int型 > VIS; 13 のint main()の 14 { 15 int型N、X、maxstate。 16 のscanf(" %D%dの"、&N、&x)は、 17 maxstate =(1個の << N) - 1 。 18 VIS [ 0 ] = 1 。 19 INT予備= 0 。 20 のために(int型 I = 1 ; I <= maxstate; iが++ ) 21は 、{ 22は IF(VISは[I ^ X])が 23であり 続け、 24 VIS [I] = 1 ; 25 q.push_back(I ^ PRE);列挙として//接頭辞が、現在の番号を記憶するために使用されます数である 26である =プレ; Iは、 27 } 28 INT LEN = q.size(); 29 のprintf(" %Dの\のN- " 、LEN)は、 30 のために(INT I = 0 ; IがLEN <; I ++の) 31である { 32 IF(私は== 0 ) 33であります printf(" %dの" 、Q [I])。 34 他の 35 のprintf(" %dの" 、Q [I])。 36 } 37 のprintf(" の\ n " ); 38 リターン 0 ; 39 }