fzu 2035 Axial symmetry(判断多边行对称)

题目地址:http://acm.fzu.edu.cn/problem.php?pid=2035

题目意思也很好懂,就是处理如何判断多边行是否对称。

先找出所有点的中点,然后一共有2×N个点,依次检查是否关于XY的连线对称

代码如此:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

#include <stdio.h>

#include <string.h>

#include <math.h>

#define Max 20000

#define eps 1e-5

struct
node

{

    double
x,y;

}node[2*Max+10];

int
n,m;

bool
flag;

double
dis(int
i,int j)

{

    double
x=node[i].x-node[j].x;

    double
y=node[i].y-node[j].y;

    return
sqrt(x*x+y*y);

}

bool
check(int
i,int j,int x,int y)

{

    if(fabs(dis(i,x)-dis(j,x))>eps)return
false;

    if(fabs(dis(i,y)-dis(j,y))>eps)return
false;

    return
true;

}

void
reco(int
x,int y)

{

    int
i,j;

    i=j=x;

    while(1)

    {

        i++;

        j--;

        if(j==0) j=m;

        if(i==y)

            {

                flag=true;

                return
;

            }

        if(check(i,j,x,y)==false)return
;

    }

}

int
main()

{

    int
i,j,cou;

    scanf("%d",&cou);

    for(i=0;i<cou;i++)

        {

            scanf("%d",&n);

            m=2*n;

            for(j=1;j<=m;j+=2)

                {

                    scanf("%lf%lf",&node[j].x,&node[j].y);

                }

            node[m+1]=node[1];

            for(j=2;j<=m;j+=2)

                {

                    node[j].x=(node[j-1].x+node[j+1].x)/2;

                    node[j].y=(node[j-1].y+node[j+1].y)/2;

                }

            flag=false;

            for(j=1;j<=n;j++)

                {

                    reco(j,j+n);

                    if(flag)break;

                }

            if(flag)printf("Case %d: YES\n",i+1);

            else
printf("Case %d: NO\n",i+1);

        }

    return
0;

}

  

作为模板mark下,写的程序太少了。。。。。。

时间: 2024-10-01 08:10:05

fzu 2035 Axial symmetry(判断多边行对称)的相关文章

判断多边行对称

题目地址:http://acm.fzu.edu.cn/problem.php?pid=2035 其实这题也是一样的:http://acm.hdu.edu.cn/showproblem.php?pid=3902 题目意思也很好懂,就是处理如何判断多边行是否对称. 先找出所有点的中点,然后一共有2×N个点,依次检查是否关于XY的连线对称 如果存在对称轴,必定是点i和点i+n连成的直线,然后分别验证两边对称的点到点i和点i+n的距离是否相等 /* 判断n边形是否是轴对称图形: n边形的n个顶点再加上n

fzu 1015 土地划分(判断线段相交+求出交点+找规律)

链接:http://acm.fzu.edu.cn/problem.php?pid=1015  Problem 1015 土地划分 Accept: 714    Submit: 1675Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description 在Dukeswood这块土地上生活着一个富有的农庄主和他的几个孩子.在他临终时,他想把他的土地分给他的孩子.他有许多农场,每个农场都是一块矩形土地.他在农场地图上划上一些直线将

LeetCode:Symmetric Tree - 判断二叉树是否对称

1.题目名称 Symmetric Tree(判断二叉树是否对称) 2.题目地址 https://leetcode.com/problems/symmetric-tree/ 3.题目内容 英文:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). 中文:给定一颗二叉树,检查它是否与自己的镜像是同一棵树(即围绕根节点对称). 4.解题方法 本题与题目"Same Tr

StringBuffer-需求:键盘录入一个字符串,判断它是不是对称的

package cn.StringBuffer; import java.util.Scanner; /* * 需求:键盘录入一个字符串,判断它是不是对称的 * 第一种方法:因为要获取每一个字符,所以先把字符串转成字符数组,然后第一个跟最后一个比较 * * 第二种方法:利用StringBuffer的反转功能,如果反转后的字符串和之前的字符串一样,那么是对称的 * */ public class IsSame { public static void main(String[] args) { S

判断DatagridView行修改保存

这些天一直在想怎么样才能去判断datagridview里的一行是不是已经被修改,如果是,就保存.最后还是发现用datagridview的rowenter事件来解决了. 方法如下: 1,先定义一个全局变量selectedRow=99999(这个值取一个行number绝对不会出现的即可)和一个对象变量(这里是computer)如下: private int selectedRow=99999; private Computer oldComputer; 2.创建RowEnter事件如下: priva

LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)

1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 bool isSymmetric(TreeNode *root) {

判断二叉树是否对称的代码

思路:要判断一颗二叉树是否对称,要判断一下几点,可以用递归来实现: 判断一颗二叉树是不是对称的,等价于判断其左右子树是不是镜像对称的 判断镜对称像即判断对称的位置上的元素是不是相等 两个节点A和B对称等价于:  这两个节点上存储的值相等 节点A的左子树节点和节点B的右子树上的节点是对称的 节点A的右子树节点和节点A的左子树上的节点是对称的 看代码: class Solution { public: bool isTreeSymmertic(TreeNode *pHead1,TreeNode *p

FZU 2148 Moon Game 判断凸边形

点击打开链接 Problem 2148 Moon Game Accept: 512    Submit: 1419 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Fat brother and Maze are playing a kind of special (hentai) game in the clearly blue sky which we can just consider as a k

判断二叉树是否对称

其实和判断是否相同是一样的: bool isSymmetric(TreeNode* root) { if (root == nullptr) { return true; } function<bool(TreeNode*&, TreeNode*&)> check; check = [&](TreeNode*& p, TreeNode*& q) { if (p == nullptr && q == nullptr){ return tru