51nod1100 斜率最大

2021-08-15 03:06:54 字數 1108 閱讀 7114

1100 斜率最大

基準時間限制:1 秒 空間限制:131072 kb 分值: 20

難度:3級演算法題

平面上有n個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。

(點的編號為1-n,如果有多條直線斜率相等,則輸出所有結果,按照點的x軸座標排序,正序輸出。資料中所有點的x軸座標均不相等,且點座標為隨機。)

input

第1行,乙個數n,n為點的數量。(2 <= n <= 10000)

第2 - n + 1行:具體n個點的座標,x y均為整數(-10^9 <= x,y <= 10^9)

output

每行2個數,中間用空格分隔。分別是起點編號和終點編號(起點的x軸座標   

input示例

51 26 8

4 45 4

2 3

output示例

4 2

思路:暴力,o(n^2)複雜度。 貪心: 斜率最大的一定是相鄰的兩個點。

證明: 排序好的3個點 a , b , c 。 ①如果共線,斜率相等 ②不共線,c位於a,b 下方 ,最大斜率為 k(ab)③ 不共線,c位於a,b上方,最大斜率為k(bc)

code:

#include using namespace std;

const int ax = 1e4+66;

struct node

s[ax],res[ax];

bool cmp( const node &a , const node &b )else return a.x < b.x;

}int main()

sort( s , s + n , cmp );

double minus = -1.0;

int tot = 0;

for( int i = 1 ; i < n ; i++ )else if( minus == k )else if( minus < k )

} for( int i = 0 ; i < tot ; i++ )

return 0 ;

}

51Nod 1100 斜率最大

1100 斜率最大 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 收藏 關注 平面上有n個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。點的編號為1 n,如果有多條直線斜率相等,則輸出所有結果,按照點的x軸座標排序,正序輸出。...

51nod 1100 斜率最大

1100 斜率最大 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 平面上有n個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。點的編號為1 n,如果有多條直線斜率相等,則輸出所有結果,按照點的x軸座標排序,正序輸出。資料中所有點...

51nod 1100 斜率最大

1100 斜率最大 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 平面上有n個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。點的編號為1 n,如果有多條直線斜率相等,則輸出所有結果,按照點的x軸座標排序,正序輸出。資料中所有點...