Cod sursa(job #1011190)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 16 octombrie 2013 15:14:02
Problema Matrix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
int n,m,a[1005][1005],def[30],v1[30],v2[30],sol=0;
void Read()
{ int i,j; char sir[2005];
   f>>n>>m;
  for(i=1;i<=n;i++)
  { f>>sir;
    for(j=0;j<n;j++)
     a[i][j+1]=sir[j]-97;
  }
  for(i=1;i<=m;i++)
  { f>>sir;
    for(j=0;j<m;j++)
     def[sir[j]-97]++;
  }
}
int Verif(int v[30])
{ int i;
  for(i=0;i<=27;i++)
   if (v[i]!=def[i]) return 0;
return 1;
}
void Solve()
{ int i,j,t,l,c;
  for(i=1;i<=m;i++)
   for(j=1;j<=m;j++)
    v1[a[i][j]]++;

  for(i=m;i<=n;i++)
   {
     if (i>m)
      for(c=1;c<=m;c++)
       {v1[a[i][c]]++; v1[a[i-m][c]]--;}



      if (Verif(v1)) sol++;

    for(j=0;j<=27;j++) v2[j]=v1[j];

      for(j=m+1;j<=n;j++)
      {
          for(l=i-m+1;l<=i;l++)
           {v2[a[l][j-m]]--;  v2[a[l][j]]++;}

        if (Verif(v2)) sol++;
      }


   }

g<<sol;

}
int main()
{ Read();
  Solve();
   /*for(int i=1;i<=n;i++)
  {for(int j=1;j<=n;j++)
   cout<<a[i][j]<<" ";
   cout<<"\n";
  }*/

    return 0;
}