質問A:キル
制限時間:1秒 メモリ制限:256メガバイト
フェイス質問
彼は公に質問に直面して減少しました。
問題の解決策
アルゴリズムの80%
レースは正の解を期待するが、他の正しさを確認するために、より多くの貪欲を選んなかったとき。
すべての奇妙なために、私たちは決済点距離の値にその重みを定義します。
皆のためのハーフ答えは、彼は再生することができ、すべての責任を考慮すると、右のは奇妙な遊びの最大値を選択します。だから、変な人が残した小さな重みを試すことができます。
しかし、それがハングします。右の少し奇妙に、途中で決済ポイントあれば考えてみましょう、しかし、少数の人々が非難する左、
そして右の人々にアウト決済点から比較的近い距離には奇妙なをつかむかもしれない左、答えは優れていないが発生します。
複雑$ O(のnmLog)$
100%のアルゴリズム
n個の半分を加えた貪欲な検証のソリューション。人の位置や位置にソートの奇妙です。
最終的な答えの半分。皆を掃引するためには、順序をDaguaiすることができたときに確認してください。あなたは、誰もが不思議な遊びを持っていることを確認することができます。
複雑$ O(nlog)$
コード:
#include <ビット/ STDC ++ H> #defineする RINTは、INTレジスタ の#define LL長い長 の#defineリード(A)A = INIT() 使用して、 名前空間STDを、 インラインint型のinit() { int型 = 0、B = 1。チャー CH = GETCHAR()。 一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(== CH ' - ')B = - 1 ; CH = GETCHAR();} 一方(CH> = ' 0 '&& CH <= ' 9 '){=(<< 3)+(<< 1)+ CH- ' 0 ' ; CH = GETCHAR();} 戻り *のBと、 } int型 N、M、S、ANS = 0x7FFFFFFFで。 int型のp [ 5003 ]、Q [ 5003 ]、W [ 5003 ]。 BOOL VIS [ 5003 ]; インラインのLL get_dis(int型のx、int型のY) { 戻り 1LLの*のABS(Q [Y] -p [X])+ ABS(Q [Y] - 秒)。 } インラインブールチェック(LL MID) { INT J = 1 。 用(RINT I = 1 ; I <= N; ++ I) { 一方(J <= M) { 場合(get_dis(I、J)<= MID){J ++。破る;} J ++ ; } もし、((jは==のM + 1)&&(iは< n))を 返し 偽。 もし((jは==のM + 1)&&(I == N)&& get_dis(N、M)> MID)を 返す 偽。 } を返す 真。 } int型)(主 { (n)を読み出す(m)を読んで、(S)読み取ります。 用(RINT I = 1 ; I <= N; ++ I)読み出す(P [I])。 用(RINT I = 1 ; I <= M ++ 読み出す(Q [i])とI); LLのL = 0、R = 0x7fffffffffffffff 。 ソート(P + 1、P + N + 1);ソート(Q + 1、Q + M + 1 )。 一方、(L <= R) { 中間LL =(L + R)>> 1 。 もし(!チェック(MID))L =ミッド+ 1 ; 他に、R =半ば1 。 } のprintf(" %LLDする\ n " 、L)。 リターン 0 ; }