In this HackerEarth Grid and phrase problem solution, You are given an n*m grid which contains lower case English letters. How many times does the phrase "saba" appear horizontally, vertically, and diagonally in the grid?
HackerEarth Grid and phrase problem solution.
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e2+10;
char jad[M][M];
int n,m,ans;
bool check(char a,char b,char c,char d)
{
if(a=='s' && b=='a' && c=='b' && d=='a')
return true;
return false;
}
int32_t main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>jad[i][j];
for(int i=4;i<=n;i++)
for(int j=1;j<=m-3;j++)
if(check(jad[i][j],jad[i-1][j+1],jad[i-2][j+2],jad[i-3][j+3]))
ans++;
for(int i=1;i<=n-3;i++)
for(int j=1;j<=m-3;j++)
if(check(jad[i][j],jad[i+1][j+1],jad[i+2][j+2],jad[i+3][j+3]))
ans++;
for(int i=1;i<=n;i++)
for(int j=1;j<=m-3;j++)
if(check(jad[i][j],jad[i][j+1],jad[i][j+2],jad[i][j+3]))
ans++;
for(int i=1;i<=n-3;i++)
for(int j=1;j<=m;j++)
if(check(jad[i][j],jad[i+1][j],jad[i+2][j],jad[i+3][j]))
ans++;
cout<<ans<<endl;
return 0;
}
Second solution
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxN=1e3+123;
string saba="saba";
string s[maxN];
int32_t main(){
int n,m;
cin>>n>>m;
int ans=0;
for(int i=0;i<n;i++)cin>>s[i];
for(int i=0;i<n-3;i++){
for(int j=0;j<m-3;j++){
bool b=true;
for(int k=0;k<4;k++){
if(s[i+k][j+k]!=saba[k])b=false;
}
if(b)ans++;
}
}
for(int i=0;i<n-3;i++){
for(int j=0;j<m;j++){
bool b=true;
for(int k=0;k<4;k++){
if(s[i+k][j]!=saba[k])b=false;
}
if(b)ans++;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m-3;j++){
bool b=true;
for(int k=0;k<4;k++){
if(s[i][j+k]!=saba[k])b=false;
}
if(b)ans++;
}
}
for(int i=3;i<n;i++){
for(int j=0;j<m-3;j++){
bool b=true;
for(int k=0;k<4;k++){
if(s[i-k][j+k]!=saba[k])b=false;
}
if(b)ans++;
}
}
cout<<ans<<endl;
}
0 Comments