洛谷P1142轰炸(改编自Uva270)

Veronica ·
更新时间:2024-11-11
· 618 次阅读

题目描述:
klux要想轰炸某个区域内的一些地方,它们是位于平面上的一些点,但是(显然地)klux遇到了抵抗,所以klux只能飞一次,而且由于飞机比较破,一点起飞就只能沿直线飞行,无法转弯。现在他想一次轰炸最多的地方

一开始看到这道题想当然的认为只有4种方向能飞,结果当然是听取WA声一片。后来发现直线不一定要是45度。

通过判断k值是否一样来确定三个点是否在同一直线上,
于是就想到了计算出每两个点之间的k值,用map记录每个k值出现的次数
最终找到最大的那个便是答案

下面是代码:

#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct node { int x, y; }; double getk(node a, node b) { return (double)(b.y-a.y)/(b.x-a.x); }//计算k值 int main() { int n, maxn{1}; node f[1000];//用于记录每个点的坐标 cin >> n; for (int i=0; i> f[i].x >> f[i].y; }//enter for (int i=0; i<n-1; i++) { map m;//记录各个点的k值 for (int j=i+1; jsecond > maxans) { maxans = it->second; maxk = it->first; } }//找出最大值 maxn = max(maxn, maxans+1); } cout << maxn <<endl; return 0; }
作者:Embers_L



p1

需要 登录 后方可回复, 如果你还没有账号请 注册新账号