zoukankan      html  css  js  c++  java
  • NCPC 2012 Galactic Warlords

    湖南大学的oj上有这套比赛;

    这题是个简单的计算几何,首先去掉重复的边,然后判断是否全部平行;

    代码:

     1 #include<cstdio>
     2 #define maxn 105
     3 using namespace std;
     4  
     5 struct node
     6 {
     7     int x1,y1;
     8     int x2,y2;
     9 } no[maxn];
    10  
    11 bool cross(node a,node b)
    12 {
    13     int x=(b.x1-a.x1)*(a.y2-a.y1)-(b.y1-a.y1)*(a.x2-a.x1);
    14     int y=(b.x2-a.x1)*(a.y2-a.y1)-(b.y2-a.y1)*(a.x2-a.x1);
    15     if(x+y==0)return 0;
    16     return 1;
    17 }
    18  
    19 bool pall(node a,node b)
    20 {
    21     int nx1=a.x2-a.x1;
    22     int ny1=a.y2-a.y1;
    23     int nx2=b.x2-b.x1;
    24     int ny2=b.y2-b.y1;
    25     if(nx1*ny2==nx2*ny1)return 0;
    26     return 1;
    27 }
    28  
    29 int main()
    30 {
    31     int n,m;
    32     while(scanf("%d%d",&n,&m)!=EOF)
    33     {
    34         bool flag2=1;
    35         int cnt=0;
    36         node a;
    37         for(int i=0; i<m; i++)
    38         {
    39             bool flag1=0;
    40             scanf("%d%d%d%d",&a.x1,&a.y1,&a.x2,&a.y2);
    41             if(cnt==0)
    42             {
    43                 no[cnt++]=a;
    44             }
    45             else
    46             {
    47                 for(int i=0; i<cnt; i++)
    48                 {
    49                     if(cross(a,no[i])==0)
    50                     {
    51                         flag1=1;
    52                         break;
    53                     }
    54                     if(pall(a,no[i])==1)flag2=0;
    55                 }
    56                 if(flag1==0)no[cnt++]=a;
    57             }
    58         }
    59         int ans;
    60         if(flag2==1)ans=cnt+1;
    61         else ans=cnt*2;
    62         if(ans>=n)puts("0");
    63         else
    64         {
    65             if(flag2==1)
    66             {
    67                 if((cnt+1)*2>=n)puts("1");
    68                 else printf("%d
    ",(n-(cnt+1)*2-1)/2+2);
    69             }
    70             else printf("%d
    ",(n-cnt*2-1)/2+1);
    71         }
    72     }
    73     return 0;
    74 }
    View Code
  • 相关阅读:
    iOS CALayer 学习(2)
    iOS CALayer 学习(1)
    iOS 绘画学习(5)
    iOS 绘画学习(4)
    果冻视图制作教程
    15个名不见经传的Unix命令
    WEB服务器2--IIS架构(转)
    WEB服务器1--开篇
    HTTP协议5之代理--转
    HTTP协议4之缓存--转
  • 原文地址:https://www.cnblogs.com/yours1103/p/3389896.html
Copyright © 2011-2022 走看看