https://www.acmicpc.net/problem/20056
20056번: 마법사 상어와 파이어볼
첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치
www.acmicpc.net
주의할 점
- m은 질량, s는 속도, d는 방향을 의미한다.
- r과 c를 제대로 입력했는지 확인하자
- 좌표가 1부터 시작하므로 0으로 시작하려면 1을 빼고 사용하자
- 맵의 양 끝과 끝은 연결되어 있다 (가로든 세로든)
- 질량의 합/5가 0이면 그 파이어볼은 사라진다
- 파이어볼이 합쳐진 방향이 제대로 지정 되어 있는지 확인하자
코드
더보기
#include<iostream>
#include<vector>
using namespace std;
typedef struct Data{
int m,s,d;
}dat;
int mv[8][2]={
{0,-1},
{1,-1},
{1,0},
{1,1},
{0,1},
{-1,1},
{-1,0},
{-1,-1},
};
int N,M,K;
vector<dat> maps[51][51];
void input(){
int x,y,m,s,d;
cin>>N>>M>>K;
while(M--){
cin>>y>>x>>m>>s>>d;
--x;
--y;
maps[y][x].push_back({m,s,d});
}
}
void chg_maps(vector<dat> tmps[51][51]){
for(int i=0;i<N;++i){
for(int j=0;j<N;++j){
maps[i][j]=tmps[i][j];
}
}
}
void move(){
vector<dat> tmps[51][51];
for(int i=0;i<N;++i){
for(int j=0;j<N;++j){
for(int k=0;k<maps[i][j].size();++k){
dat d = maps[i][j][k];
int ny=(i+mv[d.d][1]*d.s+N*1000)%N;
int nx=(j+mv[d.d][0]*d.s+N*1000)%N;
tmps[ny][nx].push_back(d);
}
}
}
chg_maps(tmps);
}
void sumFire(){
vector<dat> tmps[51][51];
for(int i=0;i<N;++i){
for(int j=0;j<N;++j){
if(maps[i][j].size()>1){
int sums=0, summ=0;
int sumd=maps[i][j][0].d%2;
for(int k=0;k<maps[i][j].size();++k){
dat d = maps[i][j][k];
if((sumd==0&&d.d%2==1)||(sumd==1&&d.d%2==0)){
sumd=2;
}
sums+=d.s;
summ+=d.m;
}
if(summ/5==0)
continue;
for(int d=sumd==2?1:0, sz=maps[i][j].size();d<8;d+=2){
tmps[i][j].push_back({summ/5,sums/sz,d});
}
}
else{
tmps[i][j]=maps[i][j];
}
}
}
chg_maps(tmps);
}
void solution(){
while(K--){
move();
sumFire();
}
int summ=0;
for(int i=0;i<N;++i){
for(int j=0;j<N;++j){
for(int k=0;k<maps[i][j].size();++k){
summ+=maps[i][j][k].m;
}
}
}
cout<<summ<<'\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solution();
return 0;
}

728x90
'알고리즘 > 백준 문제' 카테고리의 다른 글
| 5073 - 삼각형과 세 변 (0) | 2023.02.22 |
|---|---|
| 23971 - ZOAC 4 (0) | 2023.02.22 |
| [ALGORITHM] 백준 17420 - 깊콘이 넘쳐흘러 (0) | 2022.10.25 |
| [ALGORITHM] 백준 2011 - 암호코드 (0) | 2022.10.17 |
| [ALGORITHM] 백준 18185 - 라면 사기(Small) (0) | 2022.10.17 |
댓글