パイプPOJ - 1039(交差点)

パイプ   POJ - 1039

トピックリンク:https://vjudge.net/problem/POJ-1039

問題の意味:管壁、全く同一の横軸の対応する各点の下壁、上壁の縦軸の縦マイナス1、完全に導管を通る光かどうかを求めて、そうでなければ取得でき上の各点の座標を与えられました最大値

アイデア:それは件名が最大値を持つ行がある場合、確かにこのラインを平行移動させることによって、私たちができることを、下壁の上壁に頂点と頂点を介して回転可能に、線分と交差していますすべてのポイント、および下部の頂点に接続された頂点線を介して、曲げ線及び他のパイプ交差の決意は、最大値が、各交差点を交差することができれば、それは予約を完全に貫通している、払いたくはなりません。

1  //  
2  // 2020年1月14日にHJYLによって作成されます。
3  //
 4の#include <stdio.hに>
 5の#include <iostreamの>
 6の#include <アルゴリズム>
 7の#include <cmath>
 8の#include <ベクトル>
 9の#include < ストリング >
 10の#include <CStringの>
 11の#include <iomanip>
 12  使って 名前空間はstdを、
13  CONST  INT MAXN = 100 + 10 14の CONST  ダブル EPS = 1E- 8 15  構造体ポイント{
 16      ダブルX、Y。
17  }。
18  
19  ダブルクロス(点p1、点p2、点P0)
 20  {
 21      リターン(p1.x-P0.X)*(p2.y-p0.y) - (p2.x-P0.X)*(P1 .y- p0.y)。
22  }
 23  
24  BOOL ZX(ポイント、点B、点C、点D)
 25  {
 26      ダブル TMP =クロス(C、B)* クロス(D、B)。
27      であれば(ファブ(TMP)<EPS || TMP < 0 28          リターン 29      他に
30          のリターン ;
31  }
 32  
33  二重getpoint(点A、点B、点C、点D)
 34  {
 35      二重 AA =副AY。
36      ダブル BB = AX- BX。
37      二重 CC =(BX-AX)* ay-(バイAY)* 斧。
38      二重 AAA = dy- CY。
39      ダブル BBB = CX- DX。
40      二重 CCC =(DX-CX)* CY-(DY-CY)* CX。
41      二重 X =(CCC * BB-CC * BBB)/(AA * BBB-AAA * BB)。
42      二重 Y =(CC * AAA、CCC * AA)/(AA * BBB-AAA *BB);
43      リターンX。
44  }
 45  
46  のint main()の
 47  {
 48      INT N。
49      ブールフラグ。
50      ; MAXN]上記、[MAXN]以下ポイント
51  
52      ながら(〜のscanf(" %d個"、&​​N)&& N)
 53      {
 54          のためには、INTは私= 0 ; I <N; iが++ 55          {
 56              のscanf(" %LF%LF "、および[I]上記。 X、及び上記[I] .Y)。
57              [I] .X =以下、上記[I] .X
58              以下の[I] .Y = [I] .y-上記1 59          }
 60          ダブルヘッド= [上記0 ] .X。
61          フラグ= 62          int型のk。
63          のためのINTは私= 0!、I <N &&フラグ; I ++ 64          {
 65              のためにINT J = 0 ; J <N &&フラグ;!J ++ 66              {
 67                  であれば(I == j)は
 68                     休憩;
69                  のための(K = 0、K <N、K ++ 70                  {
 71                      であれば(![I]上記、[J]以下、[K]上記、[K]以下ZX())// IJ连成的线是否与K管道相交
 72                          ブレーク73                  }
 74                  であれば(K == N)
 75                      フラグ= 76                  他の 場合(K> MAX(i、j)は)
 77                  {
 78                      ヘッド= MAX(上記ヘッド、getpoint(上記[I]、[J]以下、[K- 1 ]、[K]上記))。
79                     ヘッド= MAX(頭部、getpoint(上記[I]、[J]以下、下記の[K- 1 ]、[K]以下))。
80                  }
 81              }
 82          }
 83          であれば(フラグ)
 84              のprintf(" 全ての配管を介して\ N。" );
85          他の
86              のprintf(" %.2lf \ N " 、頭)。
87      }
 88      リターン 0 89 }

 

 

おすすめ

転載: www.cnblogs.com/Vampire6/p/12220067.html
おすすめ