题目链接:传送门
计算几何水题,排序遍历一遍能过,要考虑斜率的正负值
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define N 10010
#define mod 100000
#define inf 2000000000000000ll
struct rng{
int x,y;
int num;
}t[N];
int a[N],b[N];
bool cmp(rng p,rng q){
if(p.x<q.x) return 1;
else return 0;
}
int main(){
int i,j,n,m;
cin>>n;
int cnt=0;
for(i=1;i<=n;i++){
cin>>t[i].x>>t[i].y;
t[i].num=i;
}
sort(t+1,t+1+n,cmp);
long double Max=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++){
long double k=(double)(t[j].y-t[i].y)/(t[j].x-t[i].x);
if(k>Max){
cnt=0;
Max=k;
a[++cnt]=t[i].num;
b[cnt]=t[j].num;
continue;
}
if(k==Max){
a[++cnt]=t[i].num;
b[cnt]=t[j].num;
}
}
for(i=1;i<=cnt;i++)
cout<<a[i]<<" "<<b[i]<<endl;
return 0;
}

本文介绍了一道计算几何题目,通过排序遍历并计算斜率来找出具有最大斜率的点对组合。代码实现使用C++,展示了如何定义结构体、比较函数以及主要逻辑流程。

1262

被折叠的 条评论
为什么被折叠?



