叉积(POJ

 题目链接:https://cn.vjudge.net/contest/276358#problem/A

题目大意:给你一个矩阵的左上角和右下角,然后n个竖杠,这n个竖杠将这个矩阵分成n+1个方块,给你m个点的坐标,问你每个区域的点的个数。

具体思路:叉积,如果说叉积是小于等于0的,就证明这个点在这个竖杠的左边,就把这个点归入到这个竖杠左边的区域就可以了。

AC代码:

 1 #include<iostream>
 2 #include<cmath>
 3 #include<stack>
 4 #include<queue>
 5 #include<stdio.h>
 6 #include<string>
 7 #include<cstring>
 8 #include<algorithm>
 9 using namespace std;
10 # define inf 0x3f3f3f3f
11 # define ll long long
12 const int maxn = 2e4+100;
13 struct node
14 {
15     int xtop,xbot;
16 } q[maxn];
17 int ans[maxn];
18 int cal(int x2,int y2,int x1,int y1)
19 {
20     return x1*y2-x2*y1;
21 }
22 int main()
23 {
24     int n,m,x1,y1,x2,y2;
25     while(~scanf("%d",&n)&&n)
26     {
27         memset(ans,0,sizeof(ans));
28         scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2);
29         for(int i=0; i<n; i++)
30         {
31             scanf("%d %d",&q[i].xtop,&q[i].xbot);
32         }
33         int x,y;
34         for(int i=1; i<=m; i++)
35         {
36             scanf("%d %d",&x,&y);
37             int j;
38             for( j=0; j<n; j++)
39             {
40                 if(cal(q[j].xtop-q[j].xbot,y1-y2,x-q[j].xbot,y-y2)<=0)
41                     break;
42             }
43             ans[j]++;
44         }
45         for(int i=0; i<=n; i++)
46         {
47             printf("%d: %d
",i,ans[i]);
48         }
49         printf("
");
50     }
51     return 0;
52 }
原文地址:https://www.cnblogs.com/letlifestop/p/10281122.html