求一條直線上能包含的最多數量的點

2021-06-20 05:45:29 字數 719 閱讀 6905

題目大意:給n個二維點的座標,求在所有點的連線中一條直線所能包含最多的點的個數;2000ms,1000的複雜度
剛開始自己想了個n^3複雜度的方法,即使加上了感覺很有效的剪枝,但是依然tle了。看了網上某acmer的部落格,恍然大悟,原來n^2logn就可以過了;
大致思路:列舉每乙個點:計算其他所有點和此點連線的斜率,然後將斜率排序。此時,便可以在排好序的斜率中將相等的斜率數量找出來(斜率相等則說明在同一條直線上)。
列舉每個點複雜度n,每次排序nlogn.所以總複雜度為

n^2logn。以下是實現的**:

#include #include #include #include #include #include #define inf 0x6fffffff

using namespace std;

struct point

;vectorpoints ;

double getslope(point a,point b)

int main()

{ int n;

scanf("%d",&n);

for(int i=1; i<=n; i++)

{points.clear();

int m;

scanf("%d",&m);

for(int j=0; jvec;

vec.clear();

for(int k=0; k

最多有多少個點在一條直線上

題目 給出二維平面上的n個點,求最多有多少點在同一條直線上。例子 給出4個點 1,2 3,6 0,0 1,3 一條直線上的點最多有3個。方法 取定乙個點points i 遍歷其他所有節點,然後統計斜率相同的點數 用map float,int 記錄斜率及其對應點數,取map中點數最多的斜率 並求取最大...

雜湊應用 求同一條直線上的點的數量

題目 description 現在輸入n個平面座標系上點,每個點均是過原點的直線 形如y kx,k為int型,0input 首先輸入的是點的數量n,接下來是n行資料,每行都是乙個點的座標。output 輸出一條經過最多點的直線上的點的數量m int sample input 1 91 1 2 21 ...

最多有多少個點在一條直線上 LintCode

給出二維平面上的n個點,求最多有多少點在同一條直線上。樣例 給出4個點 1,2 3,6 0,0 1,3 一條直線上的點最多有3個。思想 利用map ifndef c186 h define c186 h include include include include using namespace ...