Vestigium означает «след» на латыни. В этой задаче мы работаем с латинскими квадратами и матричными трассами. Трасса квадратной матрицы представляет собой сумму значений на главной диагонали (которая проходит от верхнего левого угла до нижнего правого). Квадратная матрица размером N на N является латинским квадратом, если каждая ячейка содержит одно из N различных значений, и никакое значение не повторяется в строке или столбце. В этой задаче мы будем иметь дело только с «натуральными латинскими квадратами», в которых значения N являются целыми числами от 1 до N. Учитывая матрицу, которая содержит только целые числа от 1 до N, мы хотим вычислить ее трассу и проверить, является ли она естественный латинский квадрат. Чтобы дать некоторую дополнительную информацию, вместо того, чтобы просто сказать нам, является ли матрица натуральным латинским квадратом или нет, вычислите число строк и количество столбцов, которые содержат повторяющиеся значения.
Он выполняется в Intellij
class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
for(int z=1;z<=T;z++)
{
int size=sc.nextInt();
int mat[][]=new int[size][size];
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
mat[i][j]=sc.nextInt();
}
}
int k=trace(mat,size);
int r=row_duplicate(mat,size);
int c=col_duplicate(mat,size);
System.out.println("Case #" +z+ ":"+" " +k+ " " +r+ " " +c); //Case #1: 4 0 0
}
}
public static int trace(int arr[][],int size)
{
int sum=0;
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
if(i==j)
sum=sum+arr[i][j];
}
}
return sum;
}
public static int row_duplicate(int arr[][],int size)
{
Hashtable<Integer,Integer> h=new Hashtable<>();
int count=0;
for(int i=0;i<size;i++)
{
int row[]=arr[i];
for(int j=0;j<row.length;j++)
{
if(h.containsKey(row[j]))
{
count++;
break;
}
else
{
h.put(row[j],1);
}
}
h.clear();
}
return count;
}
public static int col_duplicate(int arr[][],int size)
{
Hashtable<Integer,Integer> h=new Hashtable<>();
int count=0;
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
int ele=arr[j][i];
if(h.containsKey(ele))
{
count++;
break;
}
else
{
h.put(ele,1);
}
}
h.clear();
}
return count;
}
}