Source Code
Problem: 2398 | User: Praesidio | |
Memory: 596K | Time: 16MS | |
Language: G++ | Result: Accepted |
- Source Code
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const double eps=1e-8;
typedef pair<int,int> pii;
struct point{
double x,y;
point() { }
point(double _x,double _y) : x(_x) ,y(_y) { }
};
double operator * (const point& p1,const point& p2) {
return p1.x*p2.y-p1.y*p2.x;
}
//---------------------
int n,m,x1,y1,x2,y2;
int x,y;
point a[1005];
vector <pii> v;
int ans[1005];
void init()
{
int u,l;
v.clear();
for (int i=0;i<n;i++) {
scanf("%d%d",&u,&l);
v.push_back(make_pair(u,l));
}
v.push_back(make_pair(x2,x2));
sort(v.begin(),v.end());
for (int i=0;i<n;i++) {
a[i]=point(v[i].first-v[i].second,y1-y2);
}
}
int main()
{
while (~scanf("%d",&n)&&n) {
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
init();
memset(ans,0,sizeof(ans));
a[n]=point(0,y1-y2);
for (int j=0;j<m;j++) {
scanf("%d%d",&x,&y);
for (int i=0;i<=n;i++) {
point tmp=point(x-v[i].second,y-y2);
if (a[i]*tmp>=0) {
ans[i]++;
break;
}
}
}
printf("Box\n");
for (int i=1;i<=m;i++) {
int ret=0;
for (int j=0;j<=n;j++) {
if (ans[j]==i) ret++;
}
if (ret) printf("%d: %d\n",i,ret);
}
}
return 0;
}