首页 > 试题广场 >

魔法阵

[编程题]魔法阵
  • 热度指数:3874 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

小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
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t=in.nextInt();
        while(t>0){
            int[] rows=new int[4];
            int idx=0;
            String s=in.next();
            for(int i=0;i<s.length();i++){
                rows[idx++]=(int)(s.charAt(i)-'0');
            }
            int[] cols=new int[4];
            s=in.next();
            idx=0;
            for(int i=0;i<s.length();i++){
                cols[idx++]=(int)(s.charAt(i)-'0');
            }
            Map<Integer,Integer> cnt=new HashMap();
            int max=0;
            for(int i=0;i<4;i++){
                for(int j=i+1;j<4;j++){
                    int distance=(rows[i]-rows[j])*(rows[i]-rows[j])+(cols[i]-cols[j])*(cols[i]-cols[j]);
                    cnt.put(distance,cnt.getOrDefault(distance,0)+1);
                    if(cnt.get(distance)>max) max=cnt.get(distance);
                }
            }
            System.out.println(cnt.size()==2&&max==4?"Yes":"No");
            t--;
        }
    }
}

发表于 2023-09-05 22:54:37 回复(0)
只需要判断x的max-min差值和y的max-min差值是否相等即可,相当于补上四个三角形
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        String[] current;
        for(int i=0;i<n;i++){
            int maxX=-1,minX=10001;
            current=scanner.next().split("");
            for(int j=0;j<4;j++){
                maxX=Math.max(maxX,Integer.valueOf(current[j]));
                minX=Math.min(minX,Integer.valueOf(current[j]));
            }
            
            int maxY=-1,minY=10001;
            current=scanner.next().split("");
            for(int j=0;j<4;j++){
                maxY=Math.max(maxY,Integer.valueOf(current[j]));
                minY=Math.min(minY,Integer.valueOf(current[j]));
            }
            
            if(maxX-minX==maxY-minY){
                System.out.println("Yes");
            }else{
                System.out.println("No");
            }
        }
        
    }
}

发表于 2020-06-23 15:15:24 回复(1)

问题信息

上传者:小小
难度:
2条回答 5250浏览

热门推荐

通过挑战的用户

查看代码