首页 > 其他分享 >abc248E K-colinear Line

abc248E K-colinear Line

时间:2024-10-20 19:13:59浏览次数:7  
标签:std cnt i64 dv dx dy abc248E colinear Line

给定二维平面上的N个不同的点,坐标分别为(X[i],Y[i]),问存在多少条直线穿过至少K个点?
1<=K<=N<=300;|X[i]|,|Y[i]|<=1E9

分析:最多只有300个点,可以枚举所有点对构成的直线,用斜率和截距表示,为了避免精度问题,两者用分数来表示。注意,平行与x轴和y轴的直线要特判处理。

#include <bits/stdc++.h>
using i64 = long long;

const int inf = 2E9;

struct Node {
	i64 x, y, u, v;
	bool operator<(const Node &rhs) const {
		if (x != rhs.x) return x < rhs.x;
		if (y != rhs.y) return y < rhs.y;
		if (u != rhs.u) return u < rhs.u;
		return v < rhs.v;
	}
};

i64 gcd(i64 x, i64 y) {
	return y ? gcd(y, x % y) : x;
}

void solve() {
	i64 N, K;
	std::cin >> N >> K;
	std::vector<i64> X(N), Y(N);
	for (i64 i = 0; i < N; i++) {
		std::cin >> X[i] >> Y[i];
	}

	if (K == 1) {
		std::cout << "Infinity\n";
		return;
	}

	std::map<Node,std::set<i64>> cnt;
	for (i64 i = 0; i < N; i++) {
		for (i64 j = i + 1; j < N; j++) {
			Node t;
			if (X[i] == X[j]) {
				t = {inf, 0, X[i], 0};
			} else if (Y[i] == Y[j]) {
				t = {0, inf, 0, Y[i]};
			} else {
				i64 dx = X[i] - X[j];
				i64 dy = Y[i] - Y[j];
				i64 z1 = gcd(dx, dy);
				dx /= z1;
				dy /= z1;
				i64 du = X[i] * Y[j] - X[j] * Y[i];
				i64 dv = X[i] - X[j];
				i64 z2 = gcd(du, dv);
				du /= z2;
				dv /= z2;
				t = {dx, dy, du, dv};
			}
			cnt[t].insert(i);
			cnt[t].insert(j);
		}
	}
	i64 ans = 0;
	for (auto &pr : cnt) {
		if (pr.second.size() >= K) {
			ans += 1;
		}
	}
	std::cout << ans << "\n";
}

int main() {
	std::cin.tie(0)->sync_with_stdio(0);
	int t = 1;
	while (t--) solve();
	return 0;
}

标签:std,cnt,i64,dv,dx,dy,abc248E,colinear,Line
From: https://www.cnblogs.com/chenfy27/p/18487646

相关文章

  • Regular graph and line graph (正则图和线图)(二)
    (1)循环矩阵的定义:一个矩阵称为循环矩阵,如果它的元素满足,其中下标是模约化的,并且位于集合(2),循环矩阵可由基本循环矩阵线性表出(3),循环矩阵的特征值(4)循环图的定义:图是一个循环图,它的顶点可以排序,使得邻接矩阵是一个循环矩阵(5)第一行为的邻接矩阵的循环图的特征值为:(6)可以计算3......
  • Regular graph and line graph (正则图和线图)(一)
    (1)正则图的定义:如果一个图的每个顶点的度数都是,则称这个图是正则的。(2)正则图的性质:命题1、命题2和推论1命题1:设是度正则图,则:是的特征值;如果是连通的,那么的重数为1;对于的任何特征值,我们有.命题2:矩阵属于邻接代数当且仅当是正则连通图.推论1:设是阶正则连通图,设的不同特征......
  • The 2024 ICPC Asia East Continent Online Contest (II)打题+写题笔记
    前言方队让我们来打于是来打。赛时2h过了AFGIJL,感谢qsq贡献的G。评价:A:唐,F:唐,G:没看,I:小清新构造,J:国王游戏,L:不做评价。补题补了C,EEEscape链接题意给你\(n\)个波特和一个人与一张无向联通图,波特有一个共同的活动距离\(d\)。不能在原地不动。问人在保证不遇到波特的情况下......
  • java 查看jvm使用哪个垃圾回收器 -XX:+PrintCommandLineFlags
    java查看jvm使用哪个垃圾回收器在Java中,你可以通过查看JVM启动参数来确定使用的垃圾收集器。你可以使用java命令的-XX:+PrintCommandLineFlags参数来打印出JVM的启动配置,包括选择的垃圾收集器。例如,你可以通过以下命令运行Java应用程序来查看使用的垃圾收集器:java-XX:+PrintC......
  • 巧用Office365中的Exchange Online Protection(一)
    巧用Office365中的ExchangeOnlineProtection(一)企业自建ExchangeServer我们都知道反垃圾邮件功能比较弱,通常是额外需要购买反垃圾邮件网关来配合ExchangeServer工作,达到防垃圾和病毒邮件功能,一般硬件的反垃圾邮件网关基本都集中在梭子鱼,赛门铁克等功能比较强大但是价格也比较......
  • (保姆级图文)如何使用PowerShell连接Exchange Online
    (保姆级图文)如何使用PowerShell连接ExchangeOnline直接开始菜单->所有程序-> WindowsPowerShell->WindowsPowerShell 然后右键使用管理员权限打开打开后窗口如下#连接ExchangeOnlinePowerShell#为了使从Internet下载的所有PowerShell脚本能够由受信任的......
  • 巧用Office365中的Exchange Online Protection(二)
    巧用Office365中的ExchangeOnlineProtection(二)前面的文章《 巧用Office365中的ExchangeOnlineProtection(一)》介绍了,如何利用Office365的EOP来作为本地ExchangeServer的反垃圾邮件网关,但是对于外发邮件怎么去使用Office365的EOP来进行过滤以防止本地ExchangeServer的公网I......
  • 基于离群点修正、优化分解和DLinear模型的多步风速预测方法
    翻译与总结:基于离群点修正、优化分解和DLinear模型的多步风速预测方法翻译:本文提出了一种结合离群点修正、启发式算法、信号分解方法和DLinear模型的混合风速预测模型。该模型包括三个主要步骤:首先,通过 HampelIdentifier(HI) 检测并替换风速序列中的离群点,以减少其对预测......
  • Daimayuan Online Judge 蜗蜗牌
    一副扑克牌中有 1313 种不同点数的牌,我们用 A,2,3,4,5,6,7,8,9,T,J,Q,K 分别表示点数 11 到 1313。每种点数都有四张不同花色的牌,我们用 S,H,C,D 分别表示四种不同的花色。蜗蜗发明了一种名为 蜗蜗牌 的牌型:若三张扑克牌的花色均不相同,且它们的点数之和为质数,则称......
  • Daimayuan Online Judge F. 栈!
    题目描述你需要实现一个栈,支持以下两种操作:1、插入一个整数 xx;2、删除栈顶的前 kk 个数字并在一行中按出栈顺序输出被删除的数字,数字之间以空格分隔(若删除前栈中元素不足 kk 个,则不进行删除操作,输出 -1)。初始时栈为空,现在给你 nn 个操作指令,请你按照要求输出答案。......