题意:

      给你n个点,问你3点共线的组合数有多少,就是有多少种组合是满足3点共线的。

思路:

     一开始抱着试1试的态度,暴力了一个O(n^3),结果一如既往的超时了,然后又在刚刚超时的代码上直接加了一个优化,就是如果当前斜率出现的次数小于2次,那么第三重for就不用在跑了,结果,呵呵,又超时了,然后又尝试了一个方法,就是枚举每一个点,求出所有点跟他组成的线段的斜率,记录每个斜率出现的次数,比如当前的斜率0.5出现了8次,那么就Ans
+ C(8,2) 一开始写的是C(8,3)忘记了当前的这个点必须在线段上,所以wa了一发,最后答案再除以3就行了,因为任意一组情况中的三个点都得到了一个答案,所以除以3.具体的细节看代码。


#include<stdio.h>
#include<map.h>

using namespace
std; typedef struct
{
double
x ,y;
}
NODE; NODE node[1100];
double
mkxl[1100];
map<double ,__int64>mark; double xl(int a ,int b)
{
if(
node[a].x == node[b].x) return 1000000000.0;
return (
node[a].y - node[b].y) / (node[a].x - node[b].x);
} int main ()
{
int
t ,n ,i ,j ;
__int64
Ans;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d" ,&n);
for(
i = 1 ;i <= n ;i ++)
scanf("%lf %lf" ,&node[i].x ,&node[i].y);
Ans = 0;
for(
i = 1 ;i <= n ;i ++)
{

mark.clear();
int
nowid = 0;
for(
j = 1 ;j <= n ;j ++)
{
if(
i == j) continue;
if(++
mark[xl(i ,j)] == 1)
mkxl[++nowid] = xl(i ,j);
}
for(
j = 1 ;j <= nowid ;j ++)
{
__int64
tmp = mark[mkxl[j]];
if(
tmp >= 2)
Ans += tmp * (tmp - 1) / 2;
}
}

printf("%I64d\n" ,Ans / 3);
}
return
0;
}

 

hdu 5020 求三点共线的组合数(容器记录斜率出现次数)的更多相关文章

  1. hdu 5020 求3点共线的组合数

    http://acm.hdu.edu.cn/showproblem.php?pid=5020 求3点共线的组合数 极角排序然后组合数相加 #include <cstdio> #includ ...

  2. hdu 4885 (n^2*log(n)推断三点共线建图)+最短路

    题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...

  3. hdu 4885 (n^2*log(n)判断三点共线建图)+最短路

    题意:车从起点出发,每次只能行驶L长度,必需加油到满,每次只能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 开始时候直接建图,在范围内就有边1.跑最短了,再读题后发现,若几 ...

  4. hdu 2857 求点关于线段的对称点

    本来很简单的一个题,但是有个大坑: 因为模板中Tline用到了直线的一般方程ax+by+c=0,所以有种很坑的情况需要特判: 斜率不存在啊喂 老子坑了一下午2333 #include <math ...

  5. Agent J(求三个圆围成的区域面积)

    A - A Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status P ...

  6. Friends and Berries URAL - 2067 (计算三点共线和计算的时候的注意点)

    题目链接:https://cn.vjudge.net/problem/URAL-2067 具体思路:判断三点共线就可以了,只有一对点能满足,如果一对就没有那就没有满足的. 在计算的时候,要注意,如果是 ...

  7. java编程基础篇---------> 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。

    编写一个程序,从键盘输入三个整数,求三个整数中的最小值. 关键:声明变量temp   与各数值比较. package Exam01; import java.util.Scanner; public ...

  8. Python实现利用最大公约数求三个正整数的最小公倍数示例

    Python实现利用最大公约数求三个正整数的最小公倍数示例 本文实例讲述了Python实现利用最大公约数求三个正整数的最小公倍数.分享给大家供大家参考,具体如下: 在求解两个数的小公倍数的方法时,假设 ...

  9. js求三个数的最大值运算

    js代码: <script> // var num1 = 32, // num2 = 43, // num3 = 98; // if (num1 > num2) { // if (n ...

随机推荐

  1. 剑指 Offer 63. 股票的最大利润 + 动态规划

    剑指 Offer 63. 股票的最大利润 Offer_63 题目描述 方法一:暴力法 package com.walegarrett.offer; /** * @Author WaleGarrett ...

  2. Kafka SASL ACL配置踩坑总结

    源起:工程现阶段中间件采用的是kafka.满足了大数据的高吞吐,项目间的解耦合,也增强了工程的容错率与扩展性.但是在安全这一块还有漏洞,kafka集群中,只要网站内的任何人知道kafka集群的ip与t ...

  3. Flask-SQLAlchemy使用

    Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展. 官方文档:https://flask-sqlalchemy.palletsprojects.c ...

  4. 怎么用Markdown在github上写书,并用pages展示

    怎么用git写书 安装环境 第一步 安装node npm 先检测自己电脑是否安装了node npm # 查看 node 版本 node -v # 查看 npm 版本 npm -v 复制代码 如果成功打 ...

  5. Java关于整型类缓存[-128,127]之间的数字

    我们在学习Java的包装类Integer.Long的时候可能会遇到这个问题: ①Integer a = 500;// Integer a = Integer.valueOf(500); 等价于上面的 ...

  6. sqli-labs系列——第四关

    less4 第四关的sql语句是这样的: select * from user where id=("$id"); ?id=1")–+回显正常 order by 4报错, ...

  7. 开源的 Switch 模拟器——GitHub 热点速览 v.21.12

    作者:HelloGitHub-小鱼干 脸滚键盘操作选手小鱼干这里要推荐一个超酷 Switch 模拟器,不能埋没你的游戏天赋.Ryujinx 是一个 C# 写的 Switch 模拟器,1700+ 游戏可 ...

  8. 谈谈对IOC及DI的理解与思考

    一.前言 在实际的开发过程中,我们经常会遇到这样的情况,在进行调试分析问题的时候,经常需要记录日志信息,这时可以采用输出到控制台. 因此,我们通常会定义一个日志类,来实现输出日志. 定义一个生成验证的 ...

  9. java例题_02 101~200以内的素数

    1 /*2 [程序 2 输出素数] 2 题目:判断 101-200 之间有多少个素数,并输出所有素数. 3 程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明 ...

  10. [图论]最短网络:kruskal

    最短网络 目录 最短网络 Description Input Output Sample Input Sample Output 解析 代码 Description 农民约翰被选为他们镇的镇长!他其中 ...