2318

来源:互联网 发布:下载cctv网络电视 编辑:程序博客网 时间:2024/06/05 10:27
 
#include <cstdio>#include <string>#include <cmath>using namespace std;struct point{point(): x(0.0), y(0.0){};point(const double _x, const double _y): x(_x), y(_y){};double x, y;};struct cardboard{point up, down;};int n, m, ans[5001];point up_left, down_right, toy;cardboard queue[5000];bool input(){scanf("%d", &n);if(0 == n){return false;}scanf("%d%lf%lf%lf%lf", &m, &up_left.x, &up_left.y, &down_right.x, &down_right.y);for(int i = 0; i < n; ++i){scanf("%lf%lf", &queue[i].up.x, &queue[i].down.x);queue[i].up.y = up_left.y;queue[i].down.y = down_right.y;}return true;}inline double vec_multi(const double x1, const double y1, const double x2, const double y2){return x1 * y2 - x2 * y1;}inline int cross(const point &p1, const point &p2, const point &p3){const double product = vec_multi(p1.x - p2.x, p1.y - p2.y, p3.x - p2.x, p3.y - p2.y);if(abs(product) < 1e-6){return 0;}return (product > 0)? 1: -1;}int binary_search(int left, int right, const point &toy){while(right > left){const int mid = (right + left) / 2;if(-1 == cross(toy, queue[mid].down, queue[mid].up)){right = mid;}else{left = mid + 1;}}return left;}void output(){for(int i = 0; i <= n; ++i){printf("%d: %d\n", i, ans[i]);}printf("\n");}int main(){while(input()){memset(ans, 0, sizeof(int) * (n + 1));for(int i = 0; i < m; ++i){scanf("%lf%lf", &toy.x, &toy.y);const int index = binary_search(0, n, toy);++ans[index];}output();}return 0;}

原创粉丝点击