# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
22446 | JAESu_gak (#40) | Young Zebra (KRIII5_YZ) | C++14 | 29 ms | 10228 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<stdio.h>
#include<string.h>
int n, m, nn, mm, ans[410][410];
int str, stc, cnt;
char arr[1210][1210];
bool chk[1210][1210], f_chk[1210][1210];
void dfs(int r, int c)
{
if(r%n==str%n && c%m==stc%m)
{
if(r!=str || c!=stc){ cnt=-1; return; }
}
++cnt;
chk[r][c] = true;
if(arr[r][c]==arr[r-1][c] && r>1 && !chk[r-1][c]) dfs(r-1, c);
if(cnt==-1) return;
if(arr[r][c]==arr[r+1][c] && r<nn && !chk[r+1][c]) dfs(r+1, c);
if(cnt==-1) return;
if(arr[r][c]==arr[r][c-1] && c>1 && !chk[r][c-1]) dfs(r, c-1);
if(cnt==-1) return;
if(arr[r][c]==arr[r][c+1] && c<mm && !chk[r][c+1]) dfs(r, c+1);
if(cnt==-1) return;
return;
}
void fill_cnt(int r, int c)
{
int x, y;
f_chk[r][c]=true;
x = r%n?r%n:n;
y = c%m?c%m:m;
ans[x][y] = cnt;
if(arr[r][c]==arr[r-1][c] && r>1 && !f_chk[r-1][c]) fill_cnt(r-1, c);
if(arr[r][c]==arr[r+1][c] && r<nn && !f_chk[r+1][c]) fill_cnt(r+1, c);
if(arr[r][c]==arr[r][c-1] && c>1 && !f_chk[r][c-1]) fill_cnt(r, c-1);
if(arr[r][c]==arr[r][c+1] && c<mm && !f_chk[r][c+1]) fill_cnt(r, c+1);
}
int main()
{
int i, j;
scanf("%d%d",&n, &m);
for(i=1; i<=n; ++i)
{
scanf("%s", arr[i]+1);
strcpy(arr[1205]+1, arr[i]+1);
strcpy(arr[i]+m+1, arr[1205]+1);
strcpy(arr[i]+m+m+1, arr[1205]+1);
}
for(i=n+1; i<=n*3; ++i)
{
strcpy(arr[i]+1, arr[i-n]+1);
}
nn = n*3;
mm = m*3;
for(i=n+1; i<=n*2; ++i)
{
for(j=m+1; j<=m*2; ++j)
{
if(ans[i-n][j-m]!=0) continue;
str = i;
stc = j;
cnt = 0;
dfs(i, j);
fill_cnt(i, j);
}
}
for(i=1; i<=n; ++i)
{
for(j=1; j<=m; ++j) printf("%d ", ans[i][j]);
printf("\n");
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |