EVERYTHING HAPPENS FOR THE B|

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-04-13 00:06阅读: 58评论: 0推荐: 0

abc248_e K-colinear Line 题解

K-colinear Line

题意

平面直角坐标系上给出 n 个点,第 i 个点的坐标为 (xi,yi)

请求出平面上有多少条直线穿过 n 个点中的至少 k 个点。如果有无数条这样的直线,输出 Infinity

数据范围

  • 1KN300
  • |Xi|,|Yi|109
  • ij 时,XiXj 或者 YiYj,即点的坐标两两不同。

思路

首先来一个特判,当 k=1 时,答案肯定无穷大,即输出 Infinity

然后,观察到数据范围那么小,考虑最暴力的做法:枚举两个点,两点确定一条直线,求出有多少个点在这条直线上,统计答案即可,为了去重,我们可以用一个标记数组,每次求出一条直线时都将其上的点两两标记为求过了即可。

为了判断某个点是否在直线上,需要亿点点的数学知识,公式如下:

  • 确定了一条直线,穿过了点 i 和点 j,如果点 k 在这条直线上,必然满足下面这个条件
  • xjxiyjyi=xkxiykyi,为了防止精度误差,使用交叉相乘,得到第二个式子:(xjxi)×(ykyi)=(yjyi)×(xkxi)

模拟即可,注意爆int的细节。

复杂度

  • 时间:O(n3)
  • 空间:O(n2)

Code

点击查看代码
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
int k, n, f[310][310];
ll x[310], y[310], ans;
int main () {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> x[i] >> y[i];
}
if (k == 1) { // 无穷大
cout << "Infinity";
} else {
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
if (!f[i][j]) { // 去重
vector<int> v; // 记录这条线上有哪些点
v.push_back(i), v.push_back(j);
for (int l = j + 1; l <= n; l++) {
if (1ll * (x[j] - x[i]) * (y[l] - y[i]) == 1ll * (x[l] - x[i]) * (y[j] - y[i])) { // 套用数学公式
v.push_back(l);
}
}
if (v.size() >= k) { // 满足要求
ans++;
}
for (int l : v) { // 注意了啊!这里是一个伪 n^4,实际上这两重循环总时间复杂度为 n^2。
for (int m : v) {
f[l][m] = 1; // 标记
}
}
}
}
}
cout << ans;
}
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17311946.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(58)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
Minecraft - C418
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

暂无歌词

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示