zoukankan      html  css  js  c++  java
  • POJ2398+几何+排序

    题意:

    给定一些线段的两端和一些点。

    问某些区域出现的点的个数的次数。。。

    题目给定的线段未排序!!!

    View Code
     1 /*
     2 几何+排序
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 using namespace std;
    10 const int maxn = 1005;
    11 const double eps = 1e-8;
    12 struct point {
    13     double x,y;
    14 };
    15 struct Line {
    16     point u,d;
    17 }line[ maxn ];
    18 int cnt[ maxn ],vis[ maxn ];
    19 double xmult( point sp,point ep,point op ){
    20     return ( sp.x-op.x )*( ep.y-op.y )-( sp.y-op.y )*( ep.x-op.x );
    21 }
    22 int cmp( Line a,Line b ){
    23     return ( a.u.x+a.d.x )<( b.u.x+b.d.x );
    24 }
    25 int main(){
    26     int n,m;
    27     double x1,x2,y1,y2;
    28     while( scanf("%d",&n),n ){
    29         scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
    30         line[ 0 ].u.x = x1,line[ 0 ].u.y = y1;
    31         line[ 0 ].d.x = x1,line[ 0 ].d.y = y2;
    32         for( int i=1;i<=n;i++ ){
    33             scanf("%lf%lf",&line[ i ].u.x,&line[ i ].d.x);
    34             line[ i ].u.y = y1;
    35             line[ i ].d.y = y2;
    36         }
    37         sort( line+1,line+n+1,cmp );
    38         line[ n+1 ].u.x = x2,line[ n+1 ].u.y = y1;
    39         line[ n+1 ].d.x = x2,line[ n+1 ].d.y = y2;
    40         memset( cnt,0,sizeof( cnt ) );
    41         memset( vis,0,sizeof( vis ) );
    42         for( int num=0;num<m;num++ ){
    43             point toy;
    44             scanf("%lf%lf",&toy.x,&toy.y);
    45             for( int j=0;j<=n;j++ ){
    46                 if( xmult( toy,line[ j ].d,line[ j ].u )<-eps&&xmult( toy,line[ j+1 ].d,line[ j+1 ].u )>eps ){
    47                     cnt[ j ]++;
    48                 }
    49             }
    50         }
    51         for( int i=0;i<=n;i++ ){
    52             if( cnt[ i ]!=0 )
    53                 vis[ cnt[i] ]++;
    54         }
    55         printf("Box\n");
    56         for( int i=1;i<maxn;i++ ){
    57             if( vis[ i ]!=0 )
    58                 printf("%d: %d\n",i,vis[ i ]);
    59         }
    60     }
    61     return 0;
    62 }
    keep moving...
  • 相关阅读:
    HTML5第二节
    HTML5在移动端开发的12大特性
    移动端开发遇到的坑
    html5 meta(移动端)介绍及使用
    CSS的margin塌陷(collapse)
    Block Demo
    设计模式之代理
    OC Block网上转载
    GCD之全局、主线程
    Spark SQL中 RDD 转换到 DataFrame
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2983286.html
Copyright © 2011-2022 走看看