PROBLEM LINK:
Author: Prathamesh Sogale
Author: Prathamesh Sogale
Editorialist: Yogesh Deolalkar
DIFFICULTY:
Simple.
PREREQUISITES:
Math
PROBLEM:
Yash is working on his final year project, he decided to build an image encryption technique. He found that best way to represent an image is in a form of a matrix. He tried to implement some hashing techniques to encrypt the images but when he tried to decrypt those images he found out that only some special types of matrices can be decrypted.Time is very less and he don’t have more time to fix this issue or to start new project. So he decided to submit his project with only the images which satisfy some special conditions. Conditions are as follows. You can perform matrix multiplication any number of times but the resultant matrix should be same as original matrix.
You are given an integer NN denoting size of matrix, And an N∗NN∗N matrix you need to determine if it satisfies the above conditions if it is possible Print “YES” else Print “NO”.
SOLUTIONS:
Setter's Solution
#include
using namespace std;
using ll = long long;
string getAns(ll **a,ll **b,ll n){
for(ll i = 0; i < n; i++){
for(ll j = 0; j < n; j++){
ll ans = 0;
for(ll k = 0; k < n; k++){
ans += a[i][k] * b[k][j];
}
if(ans != a[i][j]){
return "NO";
}
}
}
return "YES";
}
int main() {
// your code goes here
ll t;
cin>>t;
while(t–){
ll n;
cin>>n;
ll** a = new ll*[n];
for(ll i=0;i<n;i++){
a[i] = new ll[n];
for(ll j=0;j<n;j++){
cin>>a[i][j];
}
}
cout<<getAns(a,a,n)<<endl;
}
return 0;
}
Tester's Solution
cook your dish here
for i in range(int(input())):
n=int(input())
list1=[]
for i in range(n):
temp=list(map(int,input().split()))
list1.append(temp)
result=True
for i in range(n):
for j in range(n):
ans=0
for k in range(n):
ans +=list1[i][k]*list1[k][j]
if ans !=list1[i][j]:
result=False
if result:
print(“YES”)
else:
print(“NO”)