CodeForces 660D
2016-04-20 17:51
253 查看
算是一道基础题吧,主要在于如何巧妙地判断平行四边形,看了别人的代码,题解如下
平行四边形判定条件
(x1,y1),(x2,y2),(x3,y3),(x4,y4)
1,3;2,4为两条对角线
x1+x3 == x2+x4 && y1+y3 == y2+y4则为四边形,说白了就是,两条对角线横坐标、纵坐标分别相加(或相减后相等)
证明:
根据平行四边形定义可得
x1+m = x4 y1+n = y4
x2+m = x3 y2+n = y3
所以 x1+x3+m = x2+x4+m 即 x1+x3 = x2+x4
福利:
判断两直线(线段)位置关系
A(a,b) , B(c,d)
X1 = (int)fabs(a-c);
Y1 = (int)fabs(b-d);
X2 = (int)fabs(a-c);
Y2 = (int)fabs(b-d);
if(X1*Y2 == X2*Y1)
printf("这两条线不相交\n");
else
printf("这两条线相交\n");
用STLmap存储数据,当键值为两个时,要用pair
平行四边形判定条件
(x1,y1),(x2,y2),(x3,y3),(x4,y4)
1,3;2,4为两条对角线
x1+x3 == x2+x4 && y1+y3 == y2+y4则为四边形,说白了就是,两条对角线横坐标、纵坐标分别相加(或相减后相等)
证明:
根据平行四边形定义可得
x1+m = x4 y1+n = y4
x2+m = x3 y2+n = y3
所以 x1+x3+m = x2+x4+m 即 x1+x3 = x2+x4
福利:
判断两直线(线段)位置关系
A(a,b) , B(c,d)
X1 = (int)fabs(a-c);
Y1 = (int)fabs(b-d);
X2 = (int)fabs(a-c);
Y2 = (int)fabs(b-d);
if(X1*Y2 == X2*Y1)
printf("这两条线不相交\n");
else
printf("这两条线相交\n");
用STLmap存储数据,当键值为两个时,要用pair
#include <stdio.h> #include <iostream> #include <string> #include <algorithm> #include <string> #include <string.h> #include <math.h> #include <map> #define MAXN 2005 using namespace std; int main() { //freopen("caicai.txt","r",stdin); map<pair<int,int>,int>point; int x[MAXN],y[MAXN]; int n; scanf("%d",&n); int i,j,ans = 0; for(i = 0;i<n;i++) { scanf("%d%d",&x[i],&y[i]); for(j = 0;j<i;j++) ans += point[make_pair(x[i]+x[j],y[i]+y[j])]++;//ans += point[{x[i]+x[j],y[i]+y[j]}]++; CF是拒绝的。 } cout<<ans<<endl; return 0; }
相关文章推荐
- Red Hat Enterprise Linux 4
- 几个实用的例子——Cookie读写详解
- 如何把jar包发布到maven私服
- Android初试--Android中的文件操作之SDcard操作(2)
- 如何处理 Permission denied: user=root, access=WRITE, inode="/user" 这类Hadoop权限问题问题
- Android开发中,那些让你相见恨晚的方法、类或接口
- nginx request
- 如何启动/停止/重启MySQL
- MySQL学习笔记—触发程序
- c++11 正则表达式 替换匹配子串
- Oracle Minus
- c指针数组与数组指针与指针函数与函数指针笔记
- 请问如何用nodejs通过post发送multipart/form-data类型的http请求?
- HTML中label的两种使用方法
- Js 实现tab切换效果
- 字符串分割--java中String.split()用法
- linq之join子句
- JVM介绍
- selector加layer-list的用法
- eclipsesvn总是提示输入密码?svn总是提示输入密码的解决!