JZOJ 3231ハミング距離

タイトル

説明

バイナリ文字列A、Bのために、それらの間のハミング距離は、XOR 1の二つの文字列の後に文字列の数です。XORルールがある:

0 XOR 0 = 0

。1 1 XOR 0 =

0 = XOR 1 1

1 1 = 0 XOR。

二つの文字列間の計算のハミング距離は、それらは同じ長さでなければなりません。今、私たちは、N個の異なるバイナリ文字列を与える文字列二十から二間の最短ハミング距離を計算します。
 

入力

最初の数字は整数T(T≤10)、データの組の数を表します。

次に、データのTセットがあり、各データの最初の行は、正の整数N、異なるバイナリ文字列を表す数です。N行続いて、各列は、バイナリ文字列(5の長さ)です。私たちは、バイナリ文字列を表現するために数字(0-9)と文字(AF)を使用します。それは、16進コードのバイナリ列を表します。例えば、「12345」は、バイナリ文字列で示される「00010010001101000101.」であります 

出力

各データに対する答えは、出力整数値。
 

サンプル入力

2 
2
12345
54321
4
12345
6789A
BCDEF
0137F

サンプル出力

6 
7
 

データ制約

データの30%が1≤N≤100を持っているため

、すべてのデータのために、そこに1≤N≤100000

 

 

分析

 

  • この質問はほんの始まり、私は速く行を実行するために使用されます
  • 後で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、 - 11、ANS))ブレーク65            他の ANS ++ ;
66          coutの<< ANS << てendl;
67      }
 68 }

 

 

おすすめ

転載: www.cnblogs.com/zjzjzj/p/11112078.html