Cod sursa(job #2471095)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 10 octombrie 2019 11:32:33
Problema Matrix Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb

#include <iostream>
#include <fstream>

using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
char a[1005][1005];
char c;
int frvir[30],n,m;
short s[1005][29];
int sum[30];




int main()
{
  f>>n>>m;
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=n;j++)
      {
          f>>a[i][j];

      }

  }
  for(int i=1;i<=m;i++)
  {
      for(int j=1;j<=m;j++)
      {
          f>>c;
          frvir[c-'a']++;
      }
  }

  int submat=0;
  for(int i=1;i<=m;i++)
  {
      for(int j=1;j<=n;j++)
      {
          for(int d=0;d<26;d++)
          {
              if(a[i][j]-'a'==d) s[j][d]++;
          }
      }
  }

  for(int i=m;i<=n;i++)
  {bool ok=0;
  if(i!=m)
  {
      for(int j=1;j<=m;j++)
      {
          for(int d=0;d<26;d++)
          {
              if(a[i][j]-'a'==d) s[j][d]++;
               if(a[i-m][j]-'a'==d) s[j][d]--;
          }
      }
  }
  for(int d=0;d<=26;d++) sum[d]=0;
      for(int j=1;j<=m;j++)
      {
          for(int d=0;d<26;d++)
          {
              sum[d]+=s[j][d];

          }

      }
      for(int d=0;d<26;d++)
      {
          if(sum[d]!=frvir[d]) ok=1;
      }
      if(ok==0) submat++;
      for(int j=m+1;j<=n;j++)
      {
          ok=0;
          for(int d=0;d<=26;d++)
          {
              sum[d]=sum[d]+s[j][d];
              sum[d]=sum[d]-s[j-m][d];
              if(sum[d]!=frvir[d]) ok=1;

          }
          if(ok==0) submat++;
      }
  }
  g<<submat;


}