Cod sursa(job #2394647)

Utilizator sichetpaulSichet Paul sichetpaul Data 1 aprilie 2019 19:21:23
Problema Matrix Scor 100
Compilator cpp-64 Status done
Runda pre003 Marime 1.02 kb
#include <fstream>
#define DIM 1002
#define SIGMA 26
using namespace std;
short int sum[DIM][DIM][SIGMA],fr[SIGMA],curr[SIGMA];char ch;
bool check() {
    for (int i=0;i<SIGMA;++i)
        if (fr[i]!=curr[i]) return 0;
    return 1;
}
int main()
{   int n,m,i,j,k,ans=0;
    ifstream f("matrix.in");
    ofstream g("matrix.out");
    f>>n>>m;
    for (i=1;i<=n;++i)
    for (j=1;j<=n;++j) {
        f>>ch;
        for (k=0;k<26;++k)
            if (k!=ch-'a') sum[i][j][k]=sum[i-1][j][k];
            else sum[i][j][k]=sum[i-1][j][k]+1;
    }

      for (i=1;i<=m;++i)
      for (j=1;j<=m;++j)
         f>>ch,++fr[ch-'a'];

    for (i=m;i<=n;++i) {
        for (k=0;k<SIGMA;++k)
             curr[k]=0;
        for (j=1;j<=n;++j) {
            for (k=0;k<SIGMA;++k) {
                curr[k]+=sum[i][j][k]-sum[i-m][j][k];
                if (j>m) curr[k]=curr[k]-(sum[i][j-m][k]-sum[i-m][j-m][k]);
             }

            if (check()) ++ans;
        }
    }

         g<<ans<<'\n';

    return 0;
}