易错用 warning标记
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct node
{
double x1,y1,x2,y2;
}p[1005];
int set[1005],num[1005];
bool xiangjiao(int a,int b)
{
double t1,t2;
t1 = (p[a].x1 - p[a].x2)*(p[b].y1 - p[a].y2) - (p[b].x1 - p[a].x2)*(p[a].y1 - p[a].y2);
t1 *= (p[a].x1 - p[a].x2)*(p[b].y2 - p[a].y2) - (p[b].x2 - p[a].x2)*(p[a].y1 - p[a].y2);
t2 = (p[b].x1 - p[b].x2)*(p[a].y1 - p[b].y2) - (p[a].x1 - p[b].x2)*(p[b].y1 - p[b].y2);
t2 *= (p[b].x1 - p[b].x2)*(p[a].y2 - p[b].y2) - (p[a].x2 - p[b].x2)*(p[b].y1 - p[b].y2);
if(t1<=0 && t2<=0) return 1;
else return 0;
}
int find(int a)
{
int b = a;
while(set[a] != a) a= set[a];
return a;
}
void make(int a,int b)
{
int c = find(b);
if(c == a) return;// warning
num[a] += num[c];
set[c] = a;
}
int main()
{
// freopen("t.txt","r",stdin);
int i,j,t,n,m,id;
char command;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i = 0; i < n; i++)// warning
{
num[i] = 1;
set[i] = i;
}
m = 0;
for(i = 0; i < n; i++)
{
command = getchar();
while(command != 'P' && command != 'Q') command = getchar();
if(command == 'P')
{
- scanf("%lf%lf%lf%lf",&p[m].x1,&p[m].y1,&p[m].x2,&p[m].y2);
for(j = 0; j < m; j++)
{
if(xiangjiao(m,j))
{
make(m,j);
}
}
m++;
}
else
{
scanf("%d",&id);
printf("%d\n",num[find(id-1)]); // warning
}
}
if(t) printf("\n"); //warning
}
}