地址: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. 组件(Conponent)是图形用户界面最基本的部分

    组件(Conponent)是图形用户界面最基本的部分,也称为构件 ,是可以以图形化的方式显示在屏幕上,并能与用户进行交互的对象,例如一个按钮,一个标签等. 组件不能独立地显示出来,必须将其放在一定的容 ...

  2. smartJS 0.1 API 讲解 - Trigger

    上篇介绍了PromiseEvent,本篇介绍Trigger - 基于Promise的aop的体现:(感觉自己的对这些命名一直都很挫,也懒得想了,所以就凑合的用) Trigger 在目标对象上加入触发器 ...

  3. 【转】SetThreadLocale解决越南文乱码问题

    转自http://hi.baidu.com/killwolf110/item/838d56224067c63395f62b70 程序需要运行在越南地区,语言为越南文,操作系统为英文版,程序支持unic ...

  4. java web 登录框

    我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机.本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序. 在很 ...

  5. Multiview

    新建3个ViewController的类 新建main.stroyboard,并配置好相应的布局(编辑界面,连接视图与类,ViewController的Storyboard ID,连接3个Button ...

  6. NLM算法

    non-Local Means 非局部均值 论文原文:http://www.ipol.im/pub/art/2011/bcm_nlm/?utm_source=doi 论文源代码:http://www. ...

  7. 基础知识《三》java修饰符

    一.修饰符 private 成员随时都是“私有”的,任何人不得访问.但在实际应用中,经常想把某些东西深深地藏起来,但同时允许访问衍生类的成员. protected 关键字可帮助我们做到这一点.它的意思 ...

  8. 将坐标转化为与X轴正半轴夹角模板

    //还需加PI 和 mabs 函数 double chg(double x,double y) { double tmps; )<1e-) { ) tmps=90.0; else tmps=27 ...

  9. docker 中安装 FastDFS 总结

    如题,参考各资料后,安装FastDFS总结.基于已有docker镜像 https://hub.docker.com/r/luhuiguo/fastdfs/ docker pull luhuiguo/f ...

  10. 爬虫实战【10】利用Selenium自动登陆京东签到领金币

    今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币. 如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前 ...