pku 2398

http://acm.pku.edu.cn/JudgeOnline/problem?id=2398.

敲的时候sb掉了。。写数论习惯性的是 unsigned __int64 u64..于是乎也贴了上去...于是乎。。因为unsigned.......

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <string>
#include <bitset>
#include <vector>
#include <deque>
#include <utility>
#include <list>
#include <sstream>
#include <iostream>
#include <functional>
#include <numeric>
#include <algorithm>
using namespace std;
template<class T>inline T iabs(const T& v) {return v<0 ? -v : v;}
template<class T>inline T strTo(string s){istringstream is(s);T v;is>>v;return v;}
template<class T>inline string toStr(const T& v){ostringstream os;os<<v;return os.str();}
inline double max(double x, double y) {return x > y? x : y;}
inline double min(double x, double y) {return x < y? x : y;}
#define CLR(arr,v)   memset(arr, v, sizeof(arr))
#define SQ(a) ((a)*(a))
#define DEBUG(a)     printf("%s = %s\n", #a, toStr(a).c_str())
#define FOR(i,s,e) for( int (i)=(s); (i) < (e) ; i++)
typedef __int64 u64;
const double EP = 1E-3 ;
const double INF = 1E10;
/* 基本几何结构 */
struct POINT
{
u64 x;
u64 y;

};
struct LINESEG
{
    POINT s;
    POINT e;
    LINESEG(POINT a,POINT b)
    {s = a; e =b;}
    LINESEG(){}
};
LINESEG line[1010];
POINT toy[1010];
int sign[1010];
int n;
int m;
u64 multiply(POINT sp, POINT ep, POINT op)
{
    return ((sp.x-op.x)*(ep.y-op.y) - (ep.x-op.x)*(sp.y-op.y) );
}

bool judge(int i, int j)
{
      if ( multiply(line[i].s, toy[j], line[i].e ) > 0 && multiply(line[i+1].s,toy[j], line[i+1].e ) < 0 )
    return true;
    return false;
}
bool cmp(LINESEG a, LINESEG b)
{
    if (a.e.x < b.e.x ) return true;
    if (a.e.x == b.e.x && a.s.x < b.s.x) return true;
    return false;
}
int main()
{

    while (scanf("%d",&n)!=EOF,n>0)
    {

        CLR(sign,0);
        u64 xl,yl,xr,yr;
        scanf("%d%I64d%I64d%I64d%I64d",&m,&xl,&yl,&xr,&yr);
        FOR(i,0,n+2)
        {
            line[i].e.y = yl;
            line[i].s.y = yr;
        }
        line[0].s.x = line[0].e.x =xl;
        line[n+1].e.x = line[n+1].s.x = xr;
        FOR(i,1,n+1)
        {
            u64 u1,u2;
            scanf("%I64d%I64d",&u1,&u2);
            line[i].e.x = u1;
            line[i].s.x = u2;
        }
        n=n+2;
        FOR(i,0,m)
        scanf("%I64d%I64d",&toy[i].x,&toy[i].y);

        sort(line,line+n,cmp);
        FOR(i,0,n-1)
        {
        u64 sum = 0;
        FOR(j,0,m)
        if (judge(i,j))
            sum++;
        sign[sum]++;
        }

        printf("Box\n");
        FOR(i,1,m+1)
        if (sign[i]!=0)
        {
            printf("%d: %d\n",i,sign[i]);
        }
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值