• hdu4353 Finding Mine三角形内的点数


    http://acm.hdu.edu.cn/showproblem.php?pid=4353

    题意:

      求多边形面积和这个多边形内的金矿数的比值的最小值。

      当xi<xj<xk时:

      三角形内的点数=|ik上方的点-(ij上方的点+jk上方的点)|

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 const int Ni = 205;
     6 const int Mi = 505;
     7 int n,m;
     8 double mx;
     9 struct node{
    10     int x,y;//注意数据的范围,是否超int
    11     bool operator < (const node &a) const
    12     {
    13         return x<a.x;
    14     }
    15 }a[Ni],b[Mi];
    16 int sum[Ni][Ni];
    17 inline double fabs(double a)
    18 {
    19     if(a>1e-8) return a;
    20     if(-a>1e-8) return -a;
    21     return 0;
    22 }
    23 bool cross(int i,int j,int k)
    24 {
    25     if(0<(a[j].x-a[i].x)*(b[k].y-a[i].y)-(a[j].y-a[i].y)*(b[k].x-a[i].x))
    26         return 1;
    27     else return 0;
    28 }
    29 inline int area(int i,int j,int k)
    30 {
    31     return (a[j].x-a[i].x)*(a[k].y-a[i].y)-(a[j].y-a[i].y)*(a[k].x-a[i].x);
    32 }
    33 inline bool judge(int i,int j,int k)
    34 {
    35     if(a[i].x<b[k].x&&b[k].x<=a[j].x){
    36         if(cross(i,j,k)) return 1;
    37     }
    38     return 0;
    39 }
    40 void finds()
    41 {
    42     int i,j,k;
    43     for(i=0;i<n;i++)
    44     for(j=i+1;j<n;j++)
    45     {
    46         sum[i][j]=0;
    47         for(k=0;k<m;k++) if(judge(i,j,k))
    48             sum[i][j]++;
    49     }
    50     mx=1<<27;
    51     for(i=0;i<n;i++)
    52     for(j=i+1;j<n;j++)
    53     for(k=j+1;k<n;k++)
    54     {
    55         int ans=sum[i][k]-sum[i][j]-sum[j][k];
    56         double s=area(i,j,k);
    57         if(ans&&(s=fabs(s/ans))<mx)
    58         {
    59              mx=s;
    60         }
    61     }
    62 }
    63 int main()
    64 {
    65     int cs=1,tcs,i;
    66     scanf("%d",&tcs);
    67     while(tcs--)
    68     {
    69         scanf("%d%d",&n,&m);
    70         for(i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y);
    71         sort(a,a+n);
    72         for(i=0;i<m;i++) scanf("%d%d",&b[i].x,&b[i].y);
    73         finds();
    74         if(mx!=1<<27)
    75             printf("Case #%d: %lf\n",cs++,mx/2);
    76         else
    77             printf("Case #%d: -1\n",cs++);
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    oracle 绿色版本 instantclient 使用说明
    response 后刷新页面,点击按钮后,禁用该按钮
    模式对话框里的CheckedChanged事件
    PDF合并
    Android手机上抓包神器
    春社日的推算方法
    Web APi入门之Self-Host(二)
    Web Api之Cors跨域以及其他跨域方式(三)
    Web APi入门之基本操作(一)
    Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2655645.html
Copyright © 2020-2023  润新知