• C


    题目链接:https://cn.vjudge.net/problem/URAL-1963

    题目大意:给你一个四边形的n个点,让你判断对称点的个数(对称轴的个数*2)。

    具体思路:感谢qyn的讲解,具体的判断过程如下,首先判断两条对角线是不合法的。对于当前的对角线,(x2,y2)与(x4,y4)形成的对角线,我们只需要判断第一个点与第四个点形成的距离和第三个点和第四个点形成的距离是不是相同的,以及第二个点与第一个点形成的距离和第三个点和第二个点形成的距离是不是相等就能判断出来了。第二条对角线的判断方法类似。

    然后再开始判断每条边的中点是不是合法的,这里的判断方法是,先判断是不是矩形,如果是矩形的话,直接就是有4个点是符合的。然后再开始讨论梯形的情况,只判断腰是不是相等的就可以判断出是不是有两个点是不是合法的(注意有两个梯形)。然后需要排除一种可能性,就是平行四边形,平行四边的两个梯形的判断方法都能符合,所以当时平行四边形的时候对原来的答案减去4就可以了。

    AC代码:

     1 #include<iostream>
     2 #include<stack>
     3 #include<cmath>
     4 #include<map>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<stdio.h>
     8 #include<queue>
     9 #include<string>
    10 #include<cstring>
    11 using namespace std;
    12 const int maxn = 2100;
    13 # define inf 0x3f3f3f3f
    14 bool judge(int x1,int y1,int x2,int y2){
    15 if(x1*x2+y1*y2==0)return true;
    16 return false;
    17 }
    18 int dis(int x1,int y1,int x2,int y2){
    19 return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
    20 }
    21 int main(){
    22 int x1,y1,x2,y2;
    23 int x3,y3,x4,y4;
    24 scanf("%d %d",&x1,&y1);
    25 scanf("%d %d",&x2,&y2);
    26 scanf("%d %d",&x3,&y3);
    27 scanf("%d %d",&x4,&y4);
    28 int ans=0;
    29 if(judge(x3-x1,y3-y1,x4-x2,y4-y2)){
    30 if(dis(x4,y4,x1,y1)==dis(x4,y4,x3,y3)&&dis(x2,y2,x1,y1)==dis(x2,y2,x3,y3))ans+=2;
    31 if(dis(x3,y3,x4,y4)==dis(x3,y3,x2,y2)&&dis(x1,y1,x2,y2)==dis(x1,y1,x4,y4))ans+=2;
    32 }
    33 int tot=0;
    34 if(judge(x3-x4,y3-y4,x1-x4,y1-y4))tot++;
    35 if(judge(x4-x1,y4-y1,x2-x1,y2-y1))tot++;
    36 if(judge(x1-x2,y1-y2,x3-x2,y3-y2))tot++;
    37 if(judge(x4-x3,y4-y3,x2-x3,y2-y3))tot++;
    38 if(tot>=3){
    39 ans+=4;
    40 }
    41 int k=0;
    42 if(dis(x4,y4,x1,y1)==dis(x3,y3,x2,y2)){
    43 ans+=2;
    44 k++;
    45 }
    46 if(dis(x3,y3,x4,y4)==dis(x2,y2,x1,y1)){
    47 ans+=2;
    48 k++;
    49 }
    50 if(k==2)ans-=4;
    51 printf("%d
    ",ans);
    52 return 0;
    53 }
  • 相关阅读:
    ogre terrain
    error list
    Basic Turtorial 3( Ogre wiki)
    操作 Wave 文件(3): 接触 mmio 系列函数
    操作 Wave 文件(5): 获取 Wave 文件的格式信息
    操作 Wave 文件(6): 获取 Wave 文件的波形数据
    关于动态数组指针操作的两个例子
    操作 Wave 文件(7): 建立一个空的 Wave 文件(三种方法)
    操作 Wave 文件(8): 使用 TMediaPlayer 录制 wav 文件
    操作 Wave 文件(10): 输入输出设备与格式支持
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10507701.html
Copyright © 2020-2023  润新知