地址:http://acm.uestc.edu.cn/#/problem/show/1337

思路:

郭大侠与阴阳家

Time Limit: 3000/4000MS (Java/Others)     Memory Limit: 262144/262144KB (Java/Others)
Submit Status

“污秽”是自异世界“祸野”现身,危害人世的怪物。而“阴阳师”长年以来则与污秽战斗至今。

国中生少年·郭大侠曾以成为能祓除所有污秽的最强阴阳师为目标,但自从遭遇了“雏月之悲剧”后,他便放弃成为阴阳师。

此时,在这样的郭大侠面前,出现了一名少女,这名来自京都的少女,同样以祓除污秽为理想,并展现了惊人的实力…

……

某日,郭大侠又一次遭遇污秽危害人世,郭大侠自然决意采取行动,去清除这些污秽!

阴阳师最厉害的武器是源自于他自身所携带的符咒去引燃空气中的精灵,从而对那些污秽造成伤害。

这些精灵只要坐标恰好能够构成一个平行四边形的话,就能释放出郭大侠的最强绝招——灭绝斩!

现在假设这个战场是一个二维的平面,那么究竟有多少种阵型能够使得郭大侠释放出这个灭绝斩呢?

我们认为,只要这个平行四边形的存在一个点的坐标不同的话,就认为这个阵型不同。

当然,平行四边形的面积肯定得为正数啦~

Input

第一行包含一个整数 nn (1 ≤ n ≤ 20001 ≤ n ≤ 2000) — 表示平面上精灵的数量

接下来的nn行,每一行包含两个整数(xi, yi)(0 ≤ xi, yi ≤ 1000000000)(xi, yi)(0 ≤ xi, yi ≤ 1000000000) — 表示精灵的坐标

Output

输出一个整数,表示答案

Sample input and output

Sample Input Sample Output
4
0 1
1 0
1 1
2 0
1
 思路:

可以组成平行四边形就是两线段的中点相等(不在同一直线)

所以对所有的点组成的所有线段求一次中点。(求中点前先去重复点,,可怕,因为有多点重合的情况

然后判断中点相等好了,直接扫一遍,不过因为有多点共线什么的,所以还需要记录两个附加信息,和x轴的交点与k+b的值(我用的是y=kx+b来表示直线的,因为有垂直的情况,所以保存k+b),,,,,,,这样搞一发就好了

代码:

 #include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <cstdlib>
#include <string>
#include <bitset>
#include <vector>
#define PI acos((double)-1)
#define E exp(double(1))
#define INF 100000000
#define eps 1e-9
using namespace std;
pair<int,int>a[];
int use[];
struct P
{
double x,y,vx,vy,dis;
}p[*]; bool cmp1(pair<int,int> tx,pair<int,int> ty)
{
if(tx.first == ty.first)
return tx.second<ty.second;
return tx.first <ty.first;
}
bool cmp2(P tx,P ty)
{
if(tx.x == ty.x)
return tx.y<ty.y;
return tx.x<ty.x;
}
int main(void)
{
int n,num,cnt=;
cin>>n;
memset(use,,sizeof(use));
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].first,&a[i].second);
sort(a+,a+n+);
for(int i=;i<n;i++)
if(a[i].first==a[i+].first && a[i].second==a[i+].second)
use[i]=;
num=;
for(int i=;i<n;i++)
for(int j=i+;j<=n && !use[i];j++)
if(!use[j])
{
double k,b;
p[++num].x=(a[i].first+a[j].first)/2.0;//Öеã
p[num].y=(a[i].second+a[j].second)/2.0;
if(a[j].first-a[i].first==)
{
p[num].vy=;
p[num].vx=a[i].first;
p[num].dis=;
continue;
}
k=(a[j].second-a[i].second)*1.0/(a[j].first-a[i].first);
b=a[i].second-k*a[i].first;
p[num].vy=b;
p[num].vx=-b/k;
p[num].dis=k+b;
}
sort(p+,p+num+,cmp2);
for(int i=;i<num;i++)
for(int j=i+;abs(p[j].x- p[i].x)<eps && abs(p[i].y- p[j].y)<eps && j<=num;j++)
if(!( abs(p[i].vy-p[j].vy)<eps && abs(p[i].dis-p[j].dis)<eps))
cnt++;
printf("%d\n",cnt);
return ;
}

cdoj1337郭大侠与阴阳家的更多相关文章

  1. cdoj 1334 郭大侠与Rabi-Ribi Label:贪心+数据结构

    郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 最近 ...

  2. cdoj 1342 郭大侠与甲铁城 树状数组+离线

    郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  3. cdoj 1334 郭大侠与Rabi-Ribi 贪心+数据结构

    郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  4. CDOJ 1284 苦恼的郭大侠 map启发式合并

    苦恼的郭大侠 题目连接: http://acm.uestc.edu.cn/#/problem/show/1284 Description 花开雷霆崖,血染伊吕波. 公元1772年. 郭大侠终于照着天行 ...

  5. cdoj1342郭大侠与甲铁城

    地址:http://acm.uestc.edu.cn/#/problem/show/1342 题目: 郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others)     ...

  6. cdoj1339郭大侠与线上游戏

    地址:http://acm.uestc.edu.cn/#/problem/show/1339 题目: 郭大侠与线上游戏 Time Limit: 6000/2000MS (Java/Others)    ...

  7. cdoj1338郭大侠与英雄学院

    地址:http://acm.uestc.edu.cn/#/problem/show/1338 思路: 郭大侠与英雄学院 Time Limit: 6000/2000MS (Java/Others)    ...

  8. cdoj1334郭大侠与Rabi-Ribi

    地址:http://acm.uestc.edu.cn/#/problem/show/1334 题目: 郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Other ...

  9. 郭大侠与Rabi-Ribi (优先队列)

    最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的 ...

随机推荐

  1. JS 怎么刷新当前页面

    reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页 ...

  2. .net 编译原理

    这听起来像是个非常高大上的名字,上学的时候我们学过的编译原理或者编译技术实际上是在讲如何将高级程序语言如C++编译为计算机可以理解的汇编语言,这里说的编译原理只是想说明在.NET的世界里编译这件事儿和 ...

  3. 让IE6支持min-width和max-width的方法

    正如君所想象的一样,同实现层的fixed一样,用的是expression语句.例如div#demo在: IE6下最小宽度300px:   或 *html div#demo { width:expres ...

  4. Spring工具类

    文件资源访问 1.统一资源访问接口 Resource 2.实现类 FileSystemResource 通过文件系统路径访问 ClassPathResource 通过classpath路径访问 Ser ...

  5. wchat_t与char互转

     C++ Code  1234567891011121314151617181920212223242526   //窄字符转宽字符 void ConvertA2W(wchar_t* the_strw ...

  6. JavaScript------如何解决表单登录信息输入为空显示提示

    <form name="fname" method="post" action="../Home/Login" onsubmit=&q ...

  7. box-sizing与calc()与flex

    1,Syntax: /* Keyword values */ box-sizing: content-box; box-sizing: border-box; /* Global values */ ...

  8. vs2008 怎么在Release下调试代码

    vs2008 怎么在Release下调试代码 (适用VS2005/VS2008) 在当前工程点击右键选择properties,选择 All Configurations C++>General- ...

  9. 【Lombok】了解

    项目中使用了 Lombok ,对象无需写get set 等方法,一个注释便可以搞定.IDEA中项目报错,下载对应插件(Lombok Plugin)就好了.很神奇,就了解一下: 官网: Project ...

  10. 巨蟒python全栈开发-第15天 装饰器

    一.今日内容总览 关于函数的装饰器1.装饰器(重点,难点)(要求:反复写,代码不多但是很绕) 开闭原则:(比如,菜单是拆散的,一点点搞的,用友拆散自己的功能,以后就不用开发了) (1)对功能的扩展开放 ...