hdu1337郭大侠与阴阳家

地址: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),,,,,,,这样搞一发就好了

代码:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <queue>
 7 #include <stack>
 8 #include <map>
 9 #include <set>
10 #include <vector>
11 #include <cstdlib>
12 #include <string>
13 #include <bitset>
14 #include <vector>
15 #define PI acos((double)-1)
16 #define E exp(double(1))
17 #define INF 100000000
18 #define eps 1e-9
19 using namespace std;
20 pair<int,int>a[2020];
21 int use[2020];
22 struct P
23 {
24     double x,y,vx,vy,dis;
25 }p[2020*2020];
26
27 bool cmp1(pair<int,int> tx,pair<int,int> ty)
28 {
29     if(tx.first == ty.first)
30         return tx.second<ty.second;
31     return tx.first <ty.first;
32 }
33 bool cmp2(P tx,P ty)
34 {
35     if(tx.x == ty.x)
36         return tx.y<ty.y;
37     return tx.x<ty.x;
38 }
39 int main(void)
40 {
41     int n,num,cnt=0;
42     cin>>n;
43     memset(use,0,sizeof(use));
44     for(int i=1;i<=n;i++)
45         scanf("%d%d",&a[i].first,&a[i].second);
46     sort(a+1,a+n+1);
47     for(int i=1;i<n;i++)
48         if(a[i].first==a[i+1].first && a[i].second==a[i+1].second)
49             use[i]=1;
50     num=0;
51     for(int i=1;i<n;i++)
52         for(int j=i+1;j<=n && !use[i];j++)
53             if(!use[j])
54             {
55                 double k,b;
56                 p[++num].x=(a[i].first+a[j].first)/2.0;//Öеã
57                 p[num].y=(a[i].second+a[j].second)/2.0;
58                 if(a[j].first-a[i].first==0)
59                 {
60                     p[num].vy=772237;
61                     p[num].vx=a[i].first;
62                     p[num].dis=2223333;
63                     continue;
64                 }
65                 k=(a[j].second-a[i].second)*1.0/(a[j].first-a[i].first);
66                 b=a[i].second-k*a[i].first;
67                 p[num].vy=b;
68                 p[num].vx=-b/k;
69                 p[num].dis=k+b;
70             }
71     sort(p+1,p+num+1,cmp2);
72     for(int i=1;i<num;i++)
73         for(int j=i+1;abs(p[j].x- p[i].x)<eps && abs(p[i].y- p[j].y)<eps && j<=num;j++)
74         if(!( abs(p[i].vy-p[j].vy)<eps && abs(p[i].dis-p[j].dis)<eps))
75             cnt++;
76     printf("%d\n",cnt);
77     return 0;
78 }

时间: 2025-01-17 22:44:16

hdu1337郭大侠与阴阳家的相关文章

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

郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家. 当然咯,郭大侠想带回的兔

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

最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家. 当然咯,郭大侠想带回的兔子的总价值最高~ 但是,兔子实在是太多了,郭大侠的锤子每一秒钟只能敲晕一只兔子,而且每一只兔子只会在地面上逗留a[i]秒,在a[i]秒之后,这一只兔子就会跑回自己的小窝里面. 所以郭大侠面临一些抉择,希望你能帮助他. Inp

CDOJ 1335 郭大侠与“有何贵干?” (线段树&amp;扫描线) - xgtao -

郭大侠与“有何贵干?” 题意 题目给出n(<=100000)个长方体,给的是左下角和右上角的坐标x,y(1<=x,y<=1000000000),z(1<=z<=3),求刚好覆盖k次的体积,答案保证在long long 之内 题解 1.根据数据范围首先要想到要离散化. 2.求覆盖的面积或者体积会想到线段树维护扫描线,求体积难道要用二维线段树?这一道题是可以不的,因为1<=z<=3所以可以把体积拆开当做面积来算,当1<=z<=2就是求前面覆盖K次的面积,当

CDOJ 1338 郭大侠与英雄学院 (并查集) - xgtao -

郭大侠与英雄学院 题意 给出一个矩阵,然后求最小矩阵,最小矩阵就是数字可以变小但是相对大小是不能改变的. 题解 1.分析最基本的思路,假设每个数字都不同,就把记录数字的位置和权值,再把每个数字根据权值从小到大排一次序,这个位置就为max(这一行的最大值,这一列的最大值)+1. 2.但是出现了同一行同一列相同数字怎么办呢?就用并查集把同行同列的相同的数都给用一个id表示出来,再找出每一相同的数各自的每一行每一列综合起来的最大值maxi+1,最后用maxi+1来更新每一相同的数各自的每一行每一列的最

hdu1342郭大侠与甲铁城

地址:http://acm.uestc.edu.cn/#/problem/show/1342 题目: 郭大侠与甲铁城 Time Limit: 1500/800MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 全世界被产业革命的波澜推动,自近世变迁至近代之时,不死的怪物突然出现.被钢铁的皮膜包覆,只要心脏不被破坏就不会消灭,被它啃咬的人似乎也会在死过一次之后复生,并开始袭击人类.之后被称为卡巴内

hdu1338郭大侠与英雄学院

地址:http://acm.uestc.edu.cn/#/problem/show/1338 思路: 郭大侠与英雄学院 Time Limit: 6000/2000MS (Java/Others)     Memory Limit: 225535/225535KB (Java/Others) Submit Status 大部分的人类,在这个时代里都拥有名为“个性”的力量,但有力量之人却不一定都属於正义的一方.只要邪恶出现的地方,必定会有英雄挺身而出拯救众人.一名天生没有力量的少年——郭大侠从小就憧

hdu1339郭大侠与线上游戏

地址:http://acm.uestc.edu.cn/#/problem/show/1339 题目: 郭大侠与线上游戏 Time Limit: 6000/2000MS (Java/Others)     Memory Limit: 125535/65535KB (Java/Others) Submit Status 曾在网络游戏告白,但对方是假冒女生的人妖,而对此有阴影的郭大侠,坚持把游戏和现实分得清清楚楚.有一天竟被网络游戏中的女玩家告白了,虽然在游戏中接受了亚子的表白而结婚,但仍然不敢确信亚

hdu1334郭大侠与Rabi-Ribi

地址:http://acm.uestc.edu.cn/#/problem/show/1334 题目: 郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个

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

郭大侠与Rabi-Ribi Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 最近郭大侠迷上了玩Rabi-Ribi这个游戏. Rabi-Ribi呢,是一个打兔子的动作冒险游戏,萌萌哒的兔子在地上跑来跑去,好萌好萌呀~ 这个游戏是这样玩的,郭大侠作为一个主角,拿着一个小锤子,他的目标是敲晕兔子,然后最后把这些敲晕的兔子都带回家. 当然咯,郭大侠想带回的兔子的总价值最高~ 但是,兔子