백준알고리즘
낚시왕
먼지의삶
2019. 8. 1. 05:43
#include<iostream>
#include<vector>
using namespace std;
struct shark {
int r;
int c;
int s;//속도
int d;//방향 1 위 2 아래 3 오른쪽, 4 왼쪽임
int z;//크기
bool life = true;
shark(int q, int w, int speed, int t, int y) {
r = q;
c = w;
s = speed;
d = t;
z = y;
}
};
int ans;
vector<shark> v[101];
int r, c,m;
void check(int al) {
for (int i = 0; i < v[al].size(); i++) {
if (v[al][i].z == 0) continue;
int max = v[al][i].z;
vector<int> index;
index.push_back(i);
for (int j = i + 1; j < v[al].size(); j++) {
if (v[al][i].r == v[al][j].r && v[al][i].c == v[al][j].c) {
if (max < v[al][j].z) {
max = v[al][j].z;
}
index.push_back(j);
}
}
for (int j = 0; j < index.size(); j++) {
if (v[al][index[j]].z < max) {
v[al][index[j]].z = 0;
v[al][index[j]].life = false;
}
}
}
for (int j = 0; j < v[al].size(); j++) {
if (v[al][j].life == true) {
v[al + 1].push_back(v[al][j]);
}
}
}
void move(int al) {
for (int j = 0; j < v[al].size(); j++) {
if (v[al][j].z == 0) continue;
for (int i = 1; i <= v[al][j].s; i++) {
if (v[al][j].d == 1) {
v[al][j].r -= 1;
if (v[al][j].r == 0)
{
v[al][j].d = 2;
v[al][j].r = 1;
v[al][j].r += 1;
}
}
else if (v[al][j].d == 2) {
v[al][j].r += 1;
if (v[al][j].r == r + 1) {
v[al][j].d = 1;
v[al][j].r = r;
v[al][j].r -= 1;
}
}
else if (v[al][j].d == 3) {
v[al][j].c += 1;
if (v[al][j].c == c + 1) {
v[al][j].d = 4;
v[al][j].c = c;
v[al][j].c -= 1;
}
}
else if (v[al][j].d == 4) {
v[al][j].c -= 1;
if (v[al][j].c == 0) {
v[al][j].d = 3;
v[al][j].c = 1;
v[al][j].c += 1;
}
}
}
}
}
void naksi(int al) {
int x = 10000; int y = 0;
bool f = false;
for (int i = 0; i < v[al-1].size(); i++) {
if (v[al - 1][i].c == al) {
f = true;
if (x > v[al - 1][i].r)
{
x = v[al - 1][i].r;
y = i;
}
}
}
if(f) {
ans += v[al-1][y].z;
v[al - 1][y].z = 0;
v[al-1][y].life = false;
}
}
int main() {
cin >> r >> c >> m;
for (int i = 0; i < m; i++) {
int r, c, s, d, z;
cin >> r >> c >> s >> d >> z;
v[0].push_back(shark(r, c, s, d, z));
}
for (int i = 0; i < c; i++) {
if(v[i].size() == 0) break;
naksi(i + 1);
move(i);
check(i);
}
cout<<ans<<endl;
return 0;
}
전형적인 삼성스러운 시뮬레이션문제?
난이도는 하..
속도제한이 생긴다면 많이어려워질지도모르겠다
움직임 함수 + 낚시함수 + 잡아먹히는거 체크함수 + 메인 끝..