zoukankan      html  css  js  c++  java
  • CodeForces 660D

    算是一道基础题吧,主要在于如何巧妙地判断平行四边形,看了别人的代码,题解如下

    平行四边形判定条件
    (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("这两条线不相交 ");
     else
      printf("这两条线相交 ");

    用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;
    }
  • 相关阅读:
    Zend Guard 7 , Zend Guard Loader处理PHP加密
    [转]pHP源码加密方法调查
    使用USB Key(加密狗)实现身份认证
    4*4行列式矩阵键盘
    HDU-2546-饭卡
    HDU-2073-无限的路
    HDU-2065-"红色病毒"问题
    HDU-2063-过山车
    HDU-2060-Snooker
    HDU-2056-Rectangles
  • 原文地址:https://www.cnblogs.com/caitian/p/5413689.html
Copyright © 2011-2022 走看看