View Code of Problem 2595

#include<stdio.h>
#include<string.h>
int main()
{
    int t,n,x[110],y[110],X[4],Y[4];
    int i,j,s,z,sum,min;
    double k[4],b[4],c[4];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%d",&x[i],&y[i]);
        min=9999999;s=-1;
        for(i=0;i<4;i++)
        {
            scanf("%d%d",&X[i],&Y[i]);
            if(Y[i]<min)
            {
                min=Y[i];
                s=i;
            }
            else if(Y[i]==min)
            {
                if(X[i]<X[s])
                    s=i;
            }
        }
        sum=0;
        if(Y[s]==Y[(s+1)%4])
        {
            for(i=0;i<n;i++)
            {
                if(x[i]>=X[s]&&x[i]<=X[(s+1)%4]&&y[i]>=Y[s]&&y[i]<=Y[(s+2)%4])
                    sum++;
            }
            printf("%d\n",sum);
            continue;
        }
        for(i=0;i<4;i++)
        {
            z=s+i;
            k[z]=1.0*(Y[(z+1)%4]-Y[z])/(X[(z+1)%4]-X[z]);
            b[z]=-1;
            c[z]=(-k[z]*X[z]+Y[z]);
            if(k[z]<0)
            {
                k[z]=-k[z];b[z]=-b[z];c[z]=-c[z];
            }
        }
        for(i=0;i<n;i++)
        {
            if(k[s]*x[i]+b[s]*y[i]+c[s]<=0)
                if(k[(s+1)%4]*x[i]+b[(s+1)%4]*y[i]+c[(s+1)%4]<=0)
                    if(k[(s+2)%4]*x[i]+b[(s+2)%4]*y[i]+c[(s+2)%4]>=0)
                        if(k[(s+3)%4]*x[i]+b[(s+3)%4]*y[i]+c[(s+3)%4]>=0)
                            sum++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 2595