タイトル
分析
- この質問はほんの始まり、私は速く行を実行するために使用されます
- 後で2 ^ n個と呼ばれる、見つかりません
- 水はその後、50を持っていました
- その後、私は直接爆撃ことが判明し、実行するために1〜2 ^ 20 * nを指示し
- 正解:
- 我々はいくつかの形成に直接数1を利用したいです
- このような発見は、直接の後に出力することができます
コード
1の#include <iostreamの> 2の#include <cmath> 3の#include <アルゴリズム> 4の#include <cstdioを> 5の#include <CStringの> 6 の#define N 10000000 7 の#defineが長い長いっ 8 使用 名前空間STD。 9 文字列sの。 10 INT [N]。 11 INT N。 12 のint H [N]。 13 LL TRAN(ストリングS) 14 { 15 LL I、B。 16 ダブル K、H = 0 。 17 A = s.length()。 18 、B = A- 1 。 19 のために(i = 0 ; I <= A; iが++ ) 20 { 21 であれば(S [i]が<= ' 9 ' && S [I]> = ' 0 ' ) 22の S [I] = sの[I] - [ 0 " ; 23 他の 場合(S [I] <= ' F ' && S [I]> = ' A ' ) 24の S [I] = sの[I] - [ A '25 S [i]が* POW(K = 16 、B)。 26の + = H 、K。 27 b-- ; 28 } 29 リターンH。 30 } 31 BOOL DFS(int型のx、int型のy、int型の L、INT R) 32 { 33 であれば(L == R + 1 ) 34 { 35 のための(int型 i = 1 ; iが<= N; iが++ ) 36 であれば(H [I] ^ X] == 1)リターン 1 ; 37 リターン 0 。 38 } 39 のための(int型 iはY + = 1 ; iが= < 20 ; iが++ ) 40 { 41 INT M =(1つの << I)。 42 であれば(DFS(X + M、I、L + 1、R))リターン 1 。 43 } 44 リターン 0 。 45 } 46 のint main()の 47 { 48 のint T。 49 CIN >>T; 50 一方、(T) 51 { 52 のmemset(H、0、はsizeof (H))。 53 T-- 。 54 CIN >> N。 55 のために(int型 i = 1 ; iが<= N; iが++ ) 56 { 57 CIN >> S。 58 int型 T = TRAN(S)。 59 [I] = T。 60 時間[I] = 1 。 61 } 62 INT ANS =1 ; 63 一方、(1 ) 64 であれば(DFS(0、 - 1、1、ANS))ブレーク。 65 他の ANS ++ ; 66 coutの<< ANS << てendl; 67 } 68 }