【遺伝子】二次光温州

トピックリンク(GUGU区?)

遺伝子ライト

件名の説明:

  ブラック元帥は、古代の不思議な世界を支配した後、私は非常に素晴らしいゲームをプレイしてきました。二次元平面内で、彼は最初のコピー(\ N-)\小さなAは、異なる場所に入れ、その後放出する\を(AX + + C =による 0 \) 遺伝子線幅(\ D \) すなわち、この線からの距離がより大きくない\(D \)のは、小さいショットです。もちろん、いくつかの小さな悲劇Aが撮影され、小さな黒いA.なります もちろん、これはポイントではありません。長い時間のためにプレーした後、黒の元帥は、突然、彼はかつて中小ないA.を撃たれたことがわかります 元帥黒怒りので、彼はチートモードを開いて、\(C \)あなたが望む任意の値に変更します。さて、黒元帥が知りたいのですが、チートモードをオンにした後、彼はいくつかの小さなA.をヒットする遺伝子の光を急上昇しました

入力フォーマット:

  5デジタルの最初の行(\ \)、\ (B \)、\ (D \)、\ (\ N-)が、続いて(\ N-)\を各2桁のライン\(X \) \ (Y軸\)小Aの座標のことを示しています。

出力フォーマット:

  行番号は、いくつかの小さなA.を打つ対応するために最適な

サンプル入力:

1 -1 0.707106782 5 
0 0 
1 0 
0 1 
2 0 
2 1

出力例:

4

データ範囲:

データ満足の50%\(A = 0 \) ;
データ満足の100%\(N - <= 100000 \) 全ての残りの値が1000より大きい実数の絶対値ではありません。

制限時間:

1S

スペースの制限:

64M

ヒント:

削除!

問題の解決策

出射\を(AX + + C = 0 \によって)?遺伝子光線
\(Y = - \ FRAC {
A}、{B} * X- \ FRAC {C} {B} \) サンプル入力:\(A \)、\ (のb \)
その一定の勾配はわずかO(∩_∩)O〜
のみ直線Aに小さな距離の各々を得るために、基準となる直線を選択する必要があり、距離の差\(2 * D \)のエネルギー範囲内であって罰金の最高の少量。
直線距離の式をポイントを見つけるために:
線形座標:\を(A * X + B * Y + C = 0 \)の
ように座標:\((X_0、Y_0)\)
\ [D = \左\ヴェールの\ FRAC {* X_0 + B * Y_0 + C}は{\ SQRT {A ^ 2 + B ^ 2}} \右の\ VERT \]

コードの場合:

#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
double a,b,d,x,y;
double l[100009];
int main(){
    scanf("%lf%lf%lf%d",&a,&b,&d,&n);
    for(int j=1;j<=n;j++){
        scanf("%lf%lf",&x,&y);
        l[j]=((a*x+b*y)/sqrt(a*a+b*b));
    }
    sort(l+1,l+n+1);
    int j=1;
    for(int i=1;i<=n;i++){
        while(l[i]-l[j]>2*d) j++;
        ans=max(ans,i-j+1);
    }
    printf("%d",ans);
    return 0;
}

おすすめ

転載: www.cnblogs.com/linjiale/p/11266048.html