彼は良いコードよりも多くを果たしました。
テストポイントの場合、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 =陽性であります:
私はこの、最初のピットをプレイしていません。