HZOJのグループ化

彼は良いコードよりも多くを果たしました。

テストポイントの場合、11:マニュアルシミュレーション。

1  空隙QJ1_11()
 2  {
 3      であれば(N == 2 4      {
 5          int型TK。
6          もし(PD([ 1 ] + [ 2 ]))TK = 2 7          他の TK = 1 ;
8          もし(TK <= K)    
 9          {
 10              プット(" 1 " )。
11の              プット("" )。
12          }
 13          
14          {
15の              プット(" 2 " )。
16              のprintf(" %d個の\ n "1 );
17          }
 18          出口(0 );
19      }
 20 }
コードの表示

2〜6のテストポイントの:

欲張りアプローチは、現在のセグメントが添加されてもよいかどうかを決定する、各番号に遭遇し、前方スイープから、使用してもよいし、切断されません。複雑$ N ^ 2 $。

1  空隙QJ2_6()
 2  {
 3      であれば(K == 1 4      {
 5          であれば(N == 4 || N == 16 || N == 256 || N == 1024 6          {
 7              LLのL = N 、NUM = 0 8              int型 ; I i-- I = N 9              {
 10                  のためにINT J = L; J> I; j-- 11                  場合(PD([I] + [J]))
 12                  {
13                      NUM ++、ANS [++ CNT = I L = I。破ります;
14                  }
 15              }
 16              であれば(ANS [CNT] == 0 && CNT!= 0){cnt-- ;}
 17               NUM ++ 18              のprintf(" %LLDする\ n " 、NUM)。
19              のためには、int型 I = CNTを; I; i-- 20                  のprintf(" %のLLD " 、ANS [I])。
21              出口(0 );
22          }
23      }
 24 }
コードの表示

7〜10のテストポイントの:

N = 131072、次に列挙方法を変更、ああ[J] + [I] = X ^ 2、オープンバケットが存在するか否かを判定するのみに(1〜512)は、xを列挙する。n個の*の√Nの複雑さ。

1  空隙QJ7_10()
 2  {
 3      であれば(k個の== 1 4      {
 5          であれば(N == 131072 6          {
 7              INT NUM = 0 8              int型 i--; I I = N 9              {
 10の                 ためのINT J = 512、J && j個* jを> [I]; j-- 11                  場合(T [J *はJ- [I] ])
 12                  {
 13                      NUM ++、ANS [++ CNT] = I; MA(T)。破ります;
14                  }
 15                  T [[I] = 1 16              }
 17              であれば(ANS [CNT] == 0 && CNT!= 0){cnt-- ;}
 18               NUM ++ 19              のprintf(" %d個の\ n " 、NUM)。
20              のためには、int型 I = CNTを; I; i-- 21                  のprintf(" %のLLD " 、ANS [I])。
22              出口(0 );
23          }
24      }
 25 }
コードの表示

試験のために12〜25ポイント:

この時間は、二部グラフであれば競合がそうでなければOFF、小さい、K = 2を生じないように同じ貪欲法、2匹のウサギにも相反する側が、それは2つのグループに分けなければなりません。理論的複雑で$ n ^ 2 $は、実際には、水のポイントの比較があるため(人々が考えることがありますが、これは質問で$ n ^ 3 $ですので、何のカードは、このアルゴリズムが存在しない)うちは、かなり速く走ることができ、。

1  空隙QJ12_25()
 2  {
 3      であれば(K == 2 4  //     IF(N == 4 || N == 8 || N == 16)
5      {
 6          のint NUM = 0、L = N。
7          のための(再INT ; i-- I I = N 8          {
 9              ため(再INT J = L; J> I; j-- 10              であれば(PD([I] + [J]))
 11                  追加(i、j)は、(私は、j)を追加します。
12              のために(再INT J = L; J> = I; J - )CO [J] = 0;
13              であれば(!DFS(I、2 ))
 14              {
 15                  、L = I; NUM ++; ANS [++ CNT] = I。
16                  のために(再整数 ; J> = I; J = L J - )最初の[J] = 0 ;
17                  num_e = 0 18              }
 19          }
 20          であれば(ANS [CNT] == 0 && CNT!= 0){cnt-- ;}
 21           NUM ++ 22          のprintf(" %d個の\ n " 、NUM)。
23          のための(再INT I = CNT; I; i-- 24              のprintf(" %のLLD " 、ANS [I])。
25          出口(0 );
26      }
 27 }
コードの表示

解決策2はまた、K =陽性であります:

私はこの、最初のピットをプレイしていません。

 

おすすめ

転載: www.cnblogs.com/Al-Ca/p/11296096.html