Pagini recente » Cod sursa (job #2458322) | Rating Andrei Sorina-Maria (sorina-maria.andrei) | Cod sursa (job #182227) | Cod sursa (job #2436445) | Cod sursa (job #732004)
Cod sursa(job #732004)
#include <fstream>
using namespace std;
ifstream F("matrix.in");
ofstream G("matrix.out");
#define Sigma 30
#define Lim 1011
typedef int List[Sigma];
#define nat(a) ( int(a)-int('a')+1 )
int N,M,Co;
List A,B;
List Ver[Lim],Orz[Lim];
char Mat[Lim][Lim];
char Mat2[Lim][Lim];
inline void Add(List& A,List B)
{ for (int ii=1;ii<=Sigma;++ii) A[ii]+=B[ii]; }
inline void Dec(List& A,List B)
{ for (int ii=1;ii<=Sigma;++ii) A[ii]-=B[ii]; }
inline int cmp(List A,List B)
{ for (int ii=1;ii<=Sigma;++ii) if ( A[ii]!=B[ii] ) return 0; return 1; }
void updOrz()
{ }
void updVer()
{ }
int main(void)
{
F>>N>>M;
F.getline(Mat[1],N+1,'\n');
for (int i=1;i<=N;++i)
{
F.getline(Mat[i],N+1,'\n');
for (int j=N;j;--j) Mat[i][j]=Mat[i][j-1];
}
for (int i=1;i<=M;++i)
{
F.getline(Mat2[i],M+1,'\n');
for (int j=M;j;--j) Mat2[i][j]=Mat2[i][j-1];
}
for (int i=1;i<=M;++i)
for (int j=1;j<=M;++j)
++B[nat(Mat2[i][j])];
for (int i=1;i<=M;++i)
for (int j=1;j<=M;++j)
++A[nat(Mat[i][j])];
for (int i=1;i<=N;++i)
for (int j=1;j<=M;++j)
Ver[i][j]=Ver[i][j-1]+nat(Mat[i][j]);
for (int i=1;i<=M;++i)
for (int j=1;j<=N;++j)
Orz[i][j]=Orz[i-1][j]+nat(Mat[i][j]);
for ( int i=M;i<=N;++i, updVer() )
{
for ( int j=M;j<=N;++j, updOrz() )
{
if ( cmp(A,B) )
++co;
Del(A,Ver[j-M]);
Add(A,Ver[j]);
}
Del(A,Orz[i-M]);
Add(A,Orz[i]);
}
G<<Co<<'\n';
F.close();
G.close();
}