オフより多くの訓練学校2019頭の牛三H.Magicライン(思考)

 トピックポータル

質問のおおよその意味:

テスト入力Tの数、入力の数n(nは偶数である)、次いで座標が入力されたn個の異なる点で、要求出力4つの整数のX1、Y1、X2、Y2は、ポイントを介して発現され(X1等しい部分の二点に直線二次元平面内の点の、Y1)、(X2、Y2)。(この行は、任意の時点での平面を通過することができません)

サンプル入力:

1
4
0 1
-1 0
1 0
0 -1

サンプル出力:(特別審査員)

-19.99億1 -999000001

ソリューション:

これらのn個の点のxとyの2点に分割線として、一方が常にによっておよびbを見つけることができ、昇順の最初のキーに第2のキー、中央の2つの点A、Bを見つけることです急峻な線形の点は点の等しい数の2つの部分に平面内の点であってもよいです。

、A点とB点のx座標ソート中間体が同じでない場合、ただ一つがで描画され、A点とB点間の直線である;場合中間体をソート、x座標点AとBのように、それが通過しなければなりませんまっすぐに、Bの中間点。

コード:

1つの#include <ビット/ STDC ++ H>
 2  の#defineのIO IOS :: sync_with_stdio(偽)。
3  使用して 名前空間はstdを、
4  のconst  int型 M = 9999万5  構造体の6  {
 7      INT X、Y。
8 } P [ 1005 ]。
9  BOOL CMP(点s1、点S2)
 10  {
 11      であれば(s1.x == s2.x)戻り s1.y < s2.y。
12      他の リターン s1.x < s2.x。
13  }
 14 INT ()主
 15  {
 16      、IO INT T、N。
17      CIN >> T。
18      一方(T-- 19      {
 20          のint X1、Y1、X2、Y2。
21          CIN >> N。
22          のためには、int型、I = 0 ; iがN <; I ++ 23              CIN >> P [i]は.X >> P [i]の.Y。
24          ソート(P、P + N、CMP)。
25          もし(P [N / 2 ] .X = P![N / 2 - 1 ] .X)
 26             X1 = P [N / 2 - 1 ] .X、Y 1 = M、X2 = P [N / 2 ] .X、Y 2 = - M。
27          他の
28              ×1 = P [N / 2 ] .x- 1、Y1 = P [N / 2 ]・Y + M、X2 = P [N / 2 ]・X + 1、Y 2 = P [N / 2 - 1 ] .y- M。
29          coutの<< X1 << '  ' << Y1 << '  ' << X2 << '  ' << Y2 << てendl;
30      }
 31      リターン 0 32 }

 

おすすめ

転載: www.cnblogs.com/HOLLAY/p/11256817.html