题目链接: POJ 2318 TOYS
代码:
POJ 2318
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=5555;
double x1,x2,y1,y2;
int n,m;
struct point {
double x,y;
void read(double a,double b){
x=a; y=b;
}
};
struct segment {
point a, b;
void read(double c,double d){
a.read(c,y1); b.read(d,y2);
}
}L[maxn];
int num[maxn];
double cross(point A,point B,point C){
return (B.x-A.x)*(C.y-A.y)-(C.x-A.x)*(B.y-A.y);
}
int main(){
while(~scanf("%d",&n)&&n){
memset(num,0,sizeof(num));
scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
for(int i=1;i<=n;++i){
double c,d;
scanf("%lf%lf",&c,&d);
L[i].read(c,d);
}
while(m--){
double u,v; scanf("%lf%lf",&u,&v);
point p; p.read(u,v);
if(u<x1||u>x2||v<y2||v>y1) continue; ///дкЧјгђЭт
int i=1;
while(i<=n){
double s=cross(L[i].b, p, L[i].a);
if(s<0)break;
++i;
}
num[i-1]++;
}
for(int i=0;i<=n;++i)
printf("%d: %d\n",i,num[i]);
puts("");
}
return 0;
}
POJ 2389
#include <stdio.h>
#include <cstring>
#include <iostream>
#include<algorithm>
using namespace std;
const int maxn=5555;
double x1,x2,y1,y2;
int n,m;
struct point {
double x,y;
void read(double a,double b){
x=a; y=b;
}
};
struct segment {
point a, b;
void read(double c,double d){
a.read(c,y1); b.read(d,y2);
}
}L[maxn];
int num[maxn],ans[maxn];
bool cmp(segment s1, segment s2){
return s1.a.x<s2.a.x;
}
double cross(point A,point B,point C){
return (B.x-A.x)*(C.y-A.y)-(C.x-A.x)*(B.y-A.y);
}
int main(){
while(~scanf("%d",&n)&&n){
memset(num,0,sizeof(num));
scanf("%d%lf%lf%lf%lf",&m,&x1,&y1,&x2,&y2);
for(int i=1;i<=n;++i){
double c,d;
scanf("%lf%lf",&c,&d);
L[i].read(c,d);
}
sort(L+1,L+n+1,cmp);
while(m--){
double u,v; scanf("%lf%lf",&u,&v);
point p; p.read(u,v);
if(u<x1||u>x2||v<y2||v>y1) continue; ///дкЧјгђЭт
int i=1;
while(i<=n){
double s=cross(L[i].b, p, L[i].a);
if(s<0)break;
++i;
}
num[i-1]++;
}
sort(num,num+n+1);
puts("Box");
int i=0;
while(num[i]==0)++i;
int c=num[i],k=0;
for( ;i<=n+1;++i){
if(i==n+1||num[i]!=c){
printf("%d: %d\n",c,k);
k=1; c=num[i];
if(c==0) break;
}
else ++k;
}
}
return 0;
}