穷举。
/*
qq:1239198605
ctgu_yyf
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct point{
long long x,y;
};
int cmp(point a,point b)
{
return a.x<b.x;
}
long long direction(point pi,point pj,point pk) //判断向量PiPj在向量PiPk的顺逆时针方向 +顺-逆0共线
{
return (pj.x-pi.x)*(pk.y-pi.y)-(pk.x-pi.x)*(pj.y-pi.y);
}
long long yy[205][205];
point data[205],mine[1005];
int main()
{
// ios::sync_with_stdio(false);
int t,n,m,ca=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(yy,0,sizeof(yy));
//存储房子的坐标
for(int i=0;i<n;i++)
scanf("%lld%lld",&data[i].x,&data[i].y);
//存储金矿的坐标
for(int i=0;i<m;i++)
scanf("%lld%lld",&mine[i].x,&mine[i].y);
//按照x坐标大小进行排序
sort(mine,mine+m,cmp);
sort(data,data+n,cmp);
for(int i=0;i<n;i++) //预处理
for(int j=i+1;j<n;j++)
for(int k=0;k<m&&mine[k].x<data[j].x;k++)
{
if(mine[k].x>=data[i].x&&direction(data[i],data[j],mine[k])>0)
yy[i][j]++;
}
//判断点是否在三角形内
long long ans=0;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
for(int k=j+1;k<n;k++)
{
long long q=abs(yy[i][k]-yy[i][j]-yy[j][k]);
if(q%2)
ans++;
}
printf("Case %d: ",++ca);
printf("%lld\n",ans);
}
return 0;
}