1 条题解

  • 0
    @ 2024-12-24 9:59:30

    C++ :

    #include<stdio.h>
    
    int a[501],b[501],n;
    
    bool flg1(int x,int y,int i)
    {
    	long long da=a[1]-a[i];
    	long long db=b[1]-b[i];
    	long long ha=a[1]+a[i];
    	long long hb=b[1]+b[i];
    	return -da*(a[x]+a[y])+hb*db+da*ha-db*(b[x]+b[y])==0;
    }
    
    int flg2(int x,int y)
    {
    	long long da=a[2]-a[n];
    	long long db=b[2]-b[n];
    	long long ha=a[2]+a[n];
    	long long hb=b[2]+b[n];
    	return -da*(a[x]+a[y])+hb*db+da*ha-db*(b[x]+b[y])==0;
    }
    
    bool judge1(int i)
    {
    	for(int j=i+1;j<=(n+i+1)/2;j++)
        {
    		int x=j,y=n-(j-(i+1));
    		if(!flg1(x,y,i))
    			return false;
    		if((a[y]-a[x])*(b[1]-b[i])!=(a[1]-a[i])*(b[y]-b[x]))
    			return false;
    	}
    	for(int j=2;j<=(i+1)/2;j++)
    	{
    		int y=j,x=i-(j-1);
    		if(!flg1(x,y,i))
    			return false;
    		if((a[y]-a[x])*(b[1]-b[i])!=(a[1]-a[i])*(b[y]-b[x]))
    			return false;
    	}
    	return true;
    }
    
    bool judge2()
    {
    	if((a[2]-a[1])*(a[2]-a[1])+(b[2]-b[1])*(b[2]-b[1])!=(a[n]-a[1])*(a[n]-a[1])+(b[n]-b[1])*(b[n]-b[1]))
    		return false;
    	for(int i=3;i<=(n+2)/2;i++)
    	{
    		int x=i,y=n-(i-2);
    		if(!flg2(x,y))
    			return false;
    		if((a[y]-a[x])*(b[2]-b[n])!=(a[2]-a[n])*(b[y]-b[x]))
    			return false;
    	}
    	return true;
    }
    
    int main()
    {
    	int i;
    	while(scanf("%d",&n)!=EOF)
    	{
    		for(i=1;i<=n;i++)
    			scanf("%d%d",&a[i],&b[i]);
    		bool f=false;
    		for(i=2;i<=n;i++)
    			if(judge1(i))
    			{
    				f=true;
    				puts("YES");
    				break;
    			}
    		if(!f)
    			puts(judge2()?"YES":"NO");
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1668
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者