#include #include #include typedef struct Info { int R; int C; int purifier_row; } info; bool is_possible_diffusion(info map_info, int r, int c); void diffusion(int** dust_map, info map_info); int purify(int** dust_map, info map_info); int main() { int R, C, T; scanf("%d %d %d",&R, &C, &T); int total_dust = 0; int purifier_row = 0; bool find_air_purifier = false; int** dust_map = (int**)malloc(sizeof(int*)*R); for(int r=0; r0) { int diffusion_amount = dust_map[r][c]/5; int diffusion_count = 0; for(int i=0; i<4; i++) { int nr = r + dr[i]; int nc = c + dc[i]; if(is_possible_diffusion(map_info, nr, nc)) { temp_map[nr][nc] += diffusion_amount; diffusion_count++; } } temp_map[r][c] += dust_map[r][c] - (diffusion_amount*diffusion_count); } } } for(int r=0; r0; r--) dust_map[r][0] = dust_map[r-1][0]; for(int c=0; c1; c--) dust_map[purifier_row][c] = dust_map[purifier_row][c-1]; dust_map[purifier_row][1] = 0; // dowm: clock-wise purify_dust += dust_map[purifier_row+2][0]; for(int r=purifier_row+2; rpurifier_row+1; r--) dust_map[r][C-1] = dust_map[r-1][C-1]; for(int c=C-1; c>1; c--) dust_map[purifier_row+1][c] = dust_map[purifier_row+1][c-1]; dust_map[purifier_row+1][1] = 0; return purify_dust; }