# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
22420 | 최숭실 (#40) | Young Zebra (KRIII5_YZ) | C++14 | 226 ms | 104272 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
using namespace std;
char Dy[2810][2810];
int visit[2810][2810];
char Data[410][410];
int ans[410][410];
int dir[4][2] = { 0,1,1,0,0,-1,-1,0 };
int num = 1;
int cnt[160010];
int flag = 0;
int n, m;
void dfs(int y, int x, char base)
{
for (int i = 0; i < 4; i++)
{
if (y + dir[i][0] < 0)
{
if (Data[n - 1][x%m] == base)
flag = 1;
continue;
}
if (y + dir[i][0] == 7 * n)
{
if (Data[0][x%m] == base)
flag = 1;
continue;
}
if (x + dir[i][1] < 0)
{
if (Data[y%n][m - 1] == base)
flag = 1;
continue;
}
if (x + dir[i][1] == 7 * m)
{
if (Data[y%n][0] == base)
flag = 1;
continue;
}
if (Dy[y + dir[i][0]][x + dir[i][1]] == base && visit[y+dir[i][0]][x+dir[i][1]]==0)
{
cnt[num]++;
visit[y + dir[i][0]][x + dir[i][1]] = num;
dfs(y + dir[i][0], x + dir[i][1], base);
}
}
}
int main()
{
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%s", Data[i]);
int start_n = 3*n;
int start_m = 3*m;
for (int i = 0; i < 7 * n; i++)
for (int j = 0; j < 7 * m; j++)
Dy[i][j] = Data[i%n][j%m];
for (int i = start_n; i < start_n + n; i++)
{
for (int j = start_m; j < start_m + m; j++)
{
flag = 0;
if (visit[i][j]!=0)continue;
cnt[num]++;
visit[i][j] = num;
dfs(i, j, Dy[i][j]);
if (flag)
cnt[num] = -1;
num++;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
//cout << cnt[visit[i + start_n][j + start_m]] << " ";
if (cnt[visit[i + start_n][j + start_m]] == -1)
cnt[visit[i + start_n][j + start_m]] = 0;
printf("%d ", cnt[visit[i + start_n][j + start_m]]);
}
if (i != n - 1)
printf("\n");
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |