Pagini recente » Cod sursa (job #2503829) | Cod sursa (job #894843) | Cod sursa (job #1655363) | Cod sursa (job #1387308) | Cod sursa (job #2970386)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("matrix.in");
ofstream fout("matrix.out");
char a[1001][1001];
bitset <10> line[1001][1001][26], col[1001][1001][26];
int n, X1, Y1, X2, Y2, r[26], f[26];
bitset <26> ok;
int main()
{
ok.set();
int aux;
fin >> n >> aux;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
for (short k = 0; k < 26; k++)
line[i][j][k] = line[i][j - 1][k];
fin >> a[i][j];
line[i][j][a[i][j] - 'a'] = line[i][j][a[i][j] - 'a'].to_ulong() + 1;
}
return 0;
for (int i = 1; i <= aux; i++)
for (int j = 1; j <= aux; j++)
{
char c;
fin >> c;
r[c - 'a']++;
}
int dir;
/*
0 - Up
1 - Right
2 - Down
3 - Left
*/
dir = 2;
X1 = Y1 = 1;
X2 = Y2 = aux;
for (int i = 1; i <= aux; i++)
for (int j = 1; j <= aux; j++)
ok[a[i][j] - 'a'] = ((++f[a[i][j] - 'a']) == r[a[i][j] - 'a']);
int cnt = 0, i, j;
while (true)
{
cnt += ok.all();
if (dir == 0)
{
if (X1 == 1)
{
if (Y2 == n)
break;
for (i = X1; i <= X2; i++)
ok[a[i][Y1] - 'a'] = ((--f[a[i][Y1] - 'a']) == r[a[i][Y1] - 'a']);
Y1++;
Y2++;
for (i = X1; i <= X2; i++)
ok[a[i][Y2] - 'a'] = ((++f[a[i][Y2] - 'a']) == r[a[i][Y2] - 'a']);
dir = 2;
}
else
{
for (j = Y1; j <= Y2; j++)
ok[a[X2][j] - 'a'] = ((--f[a[X2][j] - 'a']) == r[a[X2][j] - 'a']);
X2--;
X1--;
for (j = Y1; j <= Y2; j++)
ok[a[X1][j] - 'a'] = ((++f[a[X1][j] - 'a']) == r[a[X1][j] - 'a']);
}
}
else // dir == 2
{
if (X2 == n)
{
if (Y2 == n)
break;
for (i = X1; i <= X2; i++)
ok[a[i][Y1] - 'a'] = ((--f[a[i][Y1] - 'a']) == r[a[i][Y1] - 'a']);
Y1++;
Y2++;
for (i = X1; i <= X2; i++)
ok[a[i][Y2] - 'a'] = ((++f[a[i][Y2] - 'a']) == r[a[i][Y2] - 'a']);
dir = 0;
}
else
{
for (j = Y1; j <= Y2; j++)
ok[a[X1][j] - 'a'] = ((--f[a[X1][j] - 'a']) == r[a[X1][j] - 'a']);
X1++;
X2++;
for (int j = Y1; j <= Y2; j++)
ok[a[X2][j] - 'a'] = ((++f[a[X2][j] - 'a']) == r[a[X2][j] - 'a']);
}
}
}
fout << cnt;
return 0;
}