QQ9. 魔法阵
描述
小Q搜寻了整个魔法世界找到了四块魔法石所在地,当4块魔法石正好能构成一个正方形的时候将启动魔法阵,小Q就可以借此实现一个愿望。
现在给出四块魔法石所在的坐标,小Q想知道他是否能启动魔法阵
输入描述
输入的第一行包括一个整数(1≤T≤5)表示一共有T组数据输出描述
对于每组数据,如果能启动魔法阵输出“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; }