zoukankan      html  css  js  c++  java
  • poj 2398 点在多边形内

    链接:http://poj.org/problem?id=2398 

    题意:题意和2318差不多,最后要求球数相同的盒子数。

    思路:输入的隔板不是按顺序的,所以先对隔板进行排序,最后统计。

    #include<iostream>
    //#include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1000+5;
    int n,m,x1,y1,x2,y2;
    
    struct Line
    {
        int upp,low;
    } line[maxn];
    int cmp(Line l1,Line l2)
    {
        //return l2.upp-l1.upp;
        if(l1.upp<l2.upp) return 1;
        else return 0;
    //return l1.upp<l2.upp;
    }
    int toy[maxn];
    
    int isleft(int x,int y,Line l)
    {
        if(x<l.low+(y-y2)*(l.upp-l.low)*1.0/(y1-y2))
            return true;
        return false;
    }
    int binarysearch(int x,int y)
    {
        int l=0,r=n,mid;
        while(l<r)
        {
            mid=l+(r-l)/2;
            if(isleft(x,y,line[mid]))
                r=mid;
            else l=mid+1;
        }
        return l;
    }
    int main()
    {
        while(scanf("%d",&n) && n)
        {
            scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
            memset(toy,0,sizeof(toy));
            for(int i=0; i<n; ++i)
                scanf("%d%d",&line[i].upp,&line[i].low);
            sort(line,line+n,cmp);
            for(int i=0; i<m; ++i)
            {
                int x,y;
                scanf("%d%d",&x,&y);
                toy[binarysearch(x,y)]++;
            }
            sort(toy,toy+n+1);//盒子有n+1个
            printf("Box\n");
            int cnt=1;
            for(int i=0; i<n; ++i)//统计
            {
                if(toy[i+1]==toy[i])
                    cnt++;
                else
                {
                    if(toy[i]!=0)
                        printf("%d: %d\n",toy[i],cnt);
                    cnt=1;
                }
                if(i==n-1 && cnt>1)//当至少最后两个都相同的话,就要用这个进行判断
                    printf("%d: %d\n",toy[i],cnt);
            }
            if(toy[n]!=toy[n-1])//判断最后一个与前面的数不同
                printf("%d: %d\n",toy[n],1);
        }
        return 0;
    }
    

      这个统计写挫了,真的挫。

            toy[n+1]=0;//第二种统计方法,增加一个数0来方便比较
            for(int i=0; i<n+1; ++i)
            {
    
                if(toy[i+1]==toy[i])
                    cnt++;
                else
                {
                    if(toy[i]!=0)
                        printf("%d: %d\n",toy[i],cnt);
                    cnt=1;
                }
            }
    

      

  • 相关阅读:
    java 单例设计模式
    JAVAWEB监听器(二)
    pxe无人值守安装linux机器笔记----摘抄
    Ganglia3.1.7安装与配置(收录)
    Hadoop Sentry 学习
    安装和配置Sentry(收录)
    sqoop 的使用 -20160410
    深度分析如何在Hadoop中控制Map的数量(摘抄)
    CDH,CM下载
    大数据培训班 cloudera公司讲师面对面授课 CCDH CCAH CCP
  • 原文地址:https://www.cnblogs.com/54zyq/p/3070495.html
Copyright © 2011-2022 走看看