zoukankan      html  css  js  c++  java
  • POJ 2398

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int Max=1050;
    
    struct e{
    	int x1,x2;
    }edge[Max];
    struct c{
    	int x,y;
    }cal[4];
    
    int n,m;
    int X1,Y1,X2,Y2;
    int ans[Max],co[Max];
    int u,v;
    
    bool cmp(struct e A,struct e B){
    	if(A.x1<B.x1) return true;
    	return false;
    }
    
    void init(){
    	for(int i=0;i<=n;i++){
    		ans[i]=0; co[i]=0;
    	}
    }
    
    bool in(){
    	if(u>=X1&&u<=X2&&v>=Y2&&v<=Y1)
    	return true;
    	return false;
    }
    
    __int64 multi(int i){
    	int j=i+1;
    	if(j==4) j=0;
    	return (__int64)(u-cal[i].x)*(__int64)(cal[j].y-cal[i].y)-(__int64)(v-cal[i].y)*(__int64)(cal[j].x-cal[i].x);
    }
    
    bool judge(int mid){
    	__int64 pre,now;
    	cal[0].x=edge[mid].x1; cal[0].y=Y1;
    	cal[1].x=X2; cal[1].y=Y1;
    	cal[2].x=X2; cal[2].y=Y2;
    	cal[3].x=edge[mid].x2; cal[3].y=Y2;
    	for(int i=0;i<4;i++){
    		now=multi(i);
    		if(i>0){
    			if(pre*now<0)
    			return false;
    		}
    		pre=now;
    	}
    	return true;
    }
    
    void slove(){
    	int low=0,high=n;
    	int anst;
    	while(low<=high){
    		int mid=(low+high)/2;
    		if(judge(mid)){
    			anst=mid; low=mid+1;
    		}
    		else high=mid-1;
    	}
    	int k=ans[anst];
    	co[k]--;
    	ans[anst]++;
    	co[k+1]++;
    }
    
    int main(){
    	while(scanf("%d",&n)!=EOF){
    		if(n==0) break;
    		scanf("%d%d%d%d%d",&m,&X1,&Y1,&X2,&Y2);
    		init();
    		co[0]=m;
    		edge[0].x1=X1,edge[0].x2=X1;
    		for(int i=1;i<=n;i++){
    			scanf("%d%d",&edge[i].x1,&edge[i].x2);
    		}
    		sort(edge,edge+n+1,cmp);
    		for(int i=0;i<m;i++){
    			scanf("%d%d",&u,&v);
    			if(in())
    				slove();
    		}
    		printf("Box
    ");
    		for(int i=1;i<=m;i++){
    			if(co[i]){
    				printf("%d: %d
    ",i,co[i]);
    			}
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    成功连上数据库顿感世界美好许多
    MySQL数据库基本命令
    杭电1004 Let the Balloon Rise
    大数学习笔记
    安卓传感器开发之指南针
    java Class文件内部结构解析
    mysq数据库实战小型管理系统
    JSplitPane分隔线的用法
    swing 菜单+右键菜单+二级菜单实现
    input type=file 上传文件,同一个文件第二次上传无反应
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3868299.html
Copyright © 2011-2022 走看看