-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main17143.java
113 lines (101 loc) · 3 KB
/
Main17143.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main17143 {
static int[] dx = {0,-1,1,0,0};
static int[] dy = {0,0,0,1,-1};
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] map= new int[R+1][C+1];
int[][] shark= new int[M+1][5];
for(int i=1;i<=M;i++) {//상어정보
st = new StringTokenizer(br.readLine());
int[] temp = new int[5];
for(int j=0;j<5;j++) {
shark[i][j] = Integer.parseInt(st.nextToken());//rcsdz
}
map[shark[i][0]][shark[i][1]]=i;
if(shark[i][3] == 1 || shark[i][3] == 2) {//NS
shark[i][2] %= (2*R-2);//자기원래자리로 돌아옴
}else if(shark[i][3] == 3 || shark[i][3]== 4 ) {//EW
shark[i][2] %= (2*C-2);
}
}
int man = 0;//사람 위치
int catchSize=0;//잡은물고기 크기합
for(int i=1;i<=C;i++) {
//1사람이동
man++;
//2 잡음
for(int j=1;j<=R;j++) {
if(map[j][i] !=0) {
catchSize+=shark[map[j][i]][4];
shark[map[j][i]][0]=-1;
shark[map[j][i]][1]=-1;//물고기 죽음
map[j][i] = 0;
break;
}
}
int[][] tMap = new int[R+1][C+1];//상어이동 후를 저장할 임시맵
//3 상어이동
for(int j=1;j<=M;j++) {
if(shark[j][0]==-1) {//잡은상어는 패스
continue;
}
for(int k=0;k<shark[j][2];k++) {//s속도
if(shark[j][3] ==1 || shark[j][3] == 2) {
//위아래로 이동하는 상어
if(shark[j][0] == 1) {
//제일 위에 있을때 방향 바꿈
shark[j][3] =2;//s
}else if(shark[j][0]==R){
//제일 아래에있을때 방향 바꿈
shark[j][3] =1;//n
}
shark[j][0] += dx[shark[j][3]];//상어 이동
}else {
//좌우로 이동하는 상어
if(shark[j][1] == 1) {
//제일 위에 있을때 방향 바꿈
shark[j][3] =3;//e
}else if(shark[j][1]==C){
//제일 아래에있을때 방향 바꿈
shark[j][3] =4;//w
}
shark[j][1] += dy[shark[j][3]];//상어 이동
}
}
if(tMap[shark[j][0]][shark[j][1]] ==0) {//같은칸상어
tMap[shark[j][0]][shark[j][1]]=j;
}else {
int temp = tMap[shark[j][0]][shark[j][1]];
if(shark[j][4]>shark[temp][4]) {
shark[temp][0] =-1;
shark[temp][1] =-1;//dead
tMap[shark[j][0]][shark[j][1]] = j;
}else {
shark[j][0] =-1;
shark[j][1]= -1;
}
}
}
//update map
copy(map,tMap,R,C);
}
System.out.println(catchSize);
}
static void copy(int[][] map , int[][] tMap,int R,int C) {
for(int i=1;i<=R;i++) {
for(int j=1;j<=C;j++) {
map[i][j] = tMap[i][j];
}
}
}
}