Cod sursa(job #1143057)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 14 martie 2014 17:29:13
Problema Matrix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
using namespace std;
ifstream f("matrix.in");
ofstream g("matrix.out");
int N,M;
int Aparition[30];
bool OK[1005][1005];
int Matrix[1005][1005];
char Code[1005][1005];
int Result;
void Read()
{
    int i,j;
    char ch;
    f>>M>>N;
    for(i=1;i<=M;i++)
        for(j=1;j<=M;j++)
            f>>Code[i][j];
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
        {
            f>>ch;
            Aparition[ch-'a']++;
        }
}
void Browse(char ch)
{
    int i,j;
    /*for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
            Matrix[N][N][Code[i][j]-'a']++;*/
    for(i=1;i<=M;i++)
        for(j=1;j<=M;j++)
            Matrix[i][j]=Matrix[i][j-1]+Matrix[i-1][j]-Matrix[i-1][j-1]+(Code[i][j]==ch);
    for(i=N;i<=M;i++)
        for(j=N;j<=M;j++)
        {
            bool ok=0;
            int i2=i-N+1,j2=j-N+1;
            if(Matrix[i][j]-Matrix[i2-1][j]-Matrix[i][j2-1]+Matrix[i2-1][j2-1]!=Aparition[ch-'a'])
                OK[i][j]=1;
        }
}
void Count_Result()
{
    int i,j;
    for(i=N;i<=M;i++)
        for(j=N;j<=M;j++)
            if(OK[i][j]==0)
                Result++;
}
int main()
{
    Read();
    for(int i=0;i<26;i++)
        Browse(i+'a');
    Count_Result();
    g<<Result<<"\n";
    return 0;
}