Cod sursa(job #2300067)

Utilizator adiaioanaAdia R. adiaioana Data 10 decembrie 2018 20:26:10
Problema Matrix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <fstream>
#define NM 1000
using namespace std;
ifstream cin("matrix.in");
ofstream cout("matrix.out");
int ok,fr[30],nr[NM+10][NM+10],s[NM+10][NM+10],mat[NM+10][NM+10],NR,ld,M,N,sum;
char ch[NM+10][NM+10],l;
void scan();
void init();
int main()
{
    scan();
    for(int l=0;l<26;l++)
        if(fr[l])
        {
            ld++;
            for(int i=0;i<M;i++)
                for(int j=0;j<M;j++)
                {
                    ok=0;
                    if((ch[i][j]-'a')==l)
                        ok=1;
                    s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+ok;
                    if(i>=N-1&&j>=N-1)
                    {
                    sum=s[i][j];
                    if(i==N-1)
                    {
                        if(j>N-1)
                            sum-=s[i][j-N];
                    }
                    else{
                      if(j>N-1)
                          sum-=(s[i][j-N]+s[i-N][j]-s[i-N][j-N]);
                        else sum-=s[i-N][j];
                    }
                    if(sum==fr[l])
                        nr[i][j]++;
                    }
                }
            s[0][0]=0;
        }
    for(int i=0;i<M;i++)
        for(int j=0;j<M;j++)
            if(nr[i][j]==ld)
                NR++;
    cout<<NR<<'\n';
    return 0;
}
void scan()
{
    cin>>M>>N;
    for(int i=0;i<M;i++)
    {
        cin.get();
        for(int j=0;j<M;j++)
            cin>>ch[i][j];
    }
    for(int i=0;i<N;i++)
    {
        cin.get();
        for(int j=0;j<N;j++)
        {
            cin>>l;
            fr[l-'a']++;
        }
    }
}