链接: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;
            }
        }

  

 

 

 posted on 2013-05-10 09:49  ∑求和  阅读(160)  评论(0编辑  收藏  举报