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