#3327. 直线交叉
直线交叉
题目描述
在一个圆周上均匀分布着N个点,按顺时针方向依次标记为1,2,...,N。
圆周上有M条不同的直线,其中第i条直线穿过两个不同的点Ai和Bi(1≤i≤M)。
请计算满足以下条件的数对(i,j)的数量:1≤i<j≤M,且第i条直线与第j条直线相交。
输入格式
- 第一行包含两个整数N和M,分别表示圆周上的点数和直线数量。
- 接下来的M行,每行包含两个整数Ai和Bi,表示一条直线穿过的两个点。
约束条件
- 2 ≤ N ≤ 1,000,000
- 1 ≤ M ≤ 300,000
- 1 ≤ Ai < Bi ≤ N(1≤i≤M)
- 任意两条直线穿过的点对不完全相同(即(Ai,Bi) ≠ (Aj,Bj) (i≠j))
- 所有输入值均为整数
输出格式
输出满足条件的数对数量。
样例
样例输入1
8 3
1 5
1 8
2 4
样例输出1
2
解释
圆周上有8个点和3条直线:
- 第1条直线:连接点1和5
- 第2条直线:连接点1和8
- 第3条直线:连接点2和4
相交情况:
- 第1条和第2条直线相交
- 第1条和第3条直线不相交
- 第2条和第3条直线相交
因此满足条件的数对有(1,2)和(2,3),输出2。
样例输入2
5 10
2 5
1 5
1 2
2 4
2 3
1 3
1 4
3 5
3 4
4 5
样例输出2
40
注意事项
- 圆周上点的排列顺序为顺时针方向
- 两条直线相交当且仅当它们的四个端点不是完全按顺序排列的(即一个线段的两个端点不完全包含在另一个线段的两个端点之间)
相关
在下列比赛中: