Submission #22430

#TimeUsernameProblemLanguageResultExecution timeMemory
22430최숭실 (#40)Young Zebra (KRIII5_YZ)C++14
0 / 7
256 ms104276 KiB
#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() { cin >> n >> m; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> Data[i][j]; 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]] << " "; printf("%d ", cnt[visit[i + start_n][j + start_m]]); } if (i != n - 1) printf("\n"); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...