列表

详情


QQ9. 魔法阵

描述

小Q搜寻了整个魔法世界找到了四块魔法石所在地,当4块魔法石正好能构成一个正方形的时候将启动魔法阵,小Q就可以借此实现一个愿望。

现在给出四块魔法石所在的坐标,小Q想知道他是否能启动魔法阵

输入描述

输入的第一行包括一个整数(1≤T≤5)表示一共有T组数据

每组数据的第一行包括四个整数x[i](0≤x[i]≤10000),即每块魔法石所在的横坐标

每组数据的第二行包括四个整数y[i](0≤y[i]≤10000),即每块魔法石所在的纵坐标

输出描述

对于每组数据,如果能启动魔法阵输出“Yes”否则输出“No”。

示例1

输入:

3
0022
0202
0156
1605
0077
0303

输出:

Yes
Yes
No

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-08-21

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n,x[4],y[4];
    while(scanf("%d",&n)!=EOF){
        int *m=(int *)malloc(n*sizeof(int));
        for(int i=0;i<n;i++){
            scanf("%d%d%d%d",&x[0],&x[1],&x[2],&x[3]);
            scanf("%d%d%d%d",&y[0],&y[1],&y[2],&y[3]);
            //AB向量和CD向量相等,或互为反向量
            if(x[0]-x[1]==x[2]-x[3] && y[0]-y[1]==y[2]-y[3] || x[0]-x[1]==x[3]-x[2] && y[0]-y[1]==y[3]-y[2]) {
                m[i]=1;
            }
            else{
                m[i]=0;
            }
        }
        for(int i=0;i<n;i++){
            if( m[i]==1){
                printf("Yes\n");
            }else{
                printf("No\n");
            }
        }
        free(m);
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2021-05-05

#include <stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    if(n==0)
    {
        printf("No");
    }
    int x[4]={0};
    int y[4]={0};
    int count=0;
    int i=0;
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d%d",&x[0],&x[1],&x[2],&x[3]);
        scanf("%d%d%d%d",&y[0],&y[1],&y[2],&y[3]);
        count=((x[0]-x[1]==x[2]-x[3]&&y[0]-y[1]==y[2]-y[3])||(x[0]=x[1]==x[3]-x[2]&&y[0]-y[1]==y[3]-y[2]));
        if(count==1)
        {
            printf("Yes\n");
            
        }
        else 
            printf("No\n");
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2021-08-28

#include<stdio.h>
#include<math.h>
int main()
{
    int n,i;
    while (scanf("%d",&n)!=EOF)
    {
        int x1,x2,x3,x4;
        int y1,y2,y3,y4;
        double a1,a2,a3,a4,t;
        for(i=0;i<n;i++)
        {
            scanf("%1d%1d%1d%1d",&x1,&x2,&x3,&x4);
            scanf("%1d%1d%1d%1d",&y1,&y2,&y3,&y4);
            a1=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
            a2=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
            a3=sqrt((x2-x4)*(x2-x4)+(y2-y4)*(y2-y4));
            a4=sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3));
            t=a1;
            if(a2==t&&a3==t&&a4==t) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2022-01-22

#include<stdio.h>

int cmp(const void*a,const void*b) {
	return *(int*)a - *(int*)b;
}

int main() {
	int T;
	char x[5] = { 0 };
	char y[5] = { 0 };
	int len[6] = { 0 };
	int slope;
	scanf("%d\n", &T);
	for (int i = 0; i < T; i++) {
		gets(x);
		gets(y);
		len[0] = pow((x[1] - '0') - (x[0] - '0'), 2) + pow((y[1] - '0') - (y[0] - '0'), 2);
		len[1] = pow((x[2] - '0') - (x[0] - '0'), 2) + pow((y[2] - '0') - (y[0] - '0'), 2);
		len[2] = pow((x[3] - '0') - (x[0] - '0'), 2) + pow((y[3] - '0') - (y[0] - '0'), 2);
		len[3] = pow((x[1] - '0') - (x[2] - '0'), 2) + pow((y[1] - '0') - (y[2] - '0'), 2);
		len[4] = pow((x[1] - '0') - (x[3] - '0'), 2) + pow((y[1] - '0') - (y[3] - '0'), 2);
		len[5] = pow((x[2] - '0') - (x[3] - '0'), 2) + pow((y[2] - '0') - (y[3] - '0'), 2);
		qsort(len, 6, sizeof(int), cmp);
		if (len[0] == len[1] && len[1] == len[2] && len[2] && len[3] && len[4] == len[5]) {
			printf("Yes\n");
		}
		else
			printf("No\n");
	}
	getchar();
	getchar();
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2019-04-12

#include <stdio.h>
#include <math.h>
int main()
{
	int t;
	int a[10000],m=0;
	int i,i1,i2,i3,j,j1,j2,j3;
	scanf("%d",&t);
	while(t--)
	{
		int k1,k2,t1,t2,t3,t4;
		scanf("%d%d%d%d",&i,&i1,&i2,&i3);
		scanf("%d%d%d%d",&j,&j1,&j2,&j3);
		k1=(j-j2)/(i-i2);
		k2=(j1-j3)/(i1-i3);
		t1=sqrt(pow(i-i2,2)+pow(j-j2,2));
		t2=sqrt(pow(i1-i3,2)+pow(j1-j3,2));
		t3=sqrt(pow(i-i1,2)+pow(j-j1,2));
		t4=sqrt(pow(i2-i3,2)+pow(j2-j3,2));
		if(k1==k2&&t1==t2&&t2==t3&&t3==t4)
		{
		    a[m]=1;
		    m++;
		}
		else
		{
			a[m]=0;
			m++;
		}
	}
	for(int k=0;k<m;k++)
	{
		if(a[k]==1)
		  printf("Yes\n");
		else
		  printf("No\n");
	}
	return 0;
}

上一题