์ผ์ฑ SW ์ญ๋ํ ์คํธ 2022 ํ๋ฐ๊ธฐ ๊ธฐ์ถ
์ธ์๋
์ธ๊ธฐ ๊ฒ์์ธ ์ธ์๋ ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํ๋ฉ๋๋ค. ๊ฒ์์ n * n ํฌ๊ธฐ์ ๊ฒฉ์์์ ์งํ๋๋ฉฐ, ๊ฐ๊ฐ์ ๊ฒฉ์์๋ ๋ฌด๊ธฐ๋ค์ด ์์ ์ ์์ต๋๋ค. ์ด๊ธฐ์๋ ๋ฌด๊ธฐ๋ค์ด ์๋ ๋น ๊ฒฉ์์ ํ๋ ์ด์ด๋ค์ด ์์นํ๋ฉฐ ๊ฐ ํ๋ ์ด์ด๋ ์ด๊ธฐ ๋ฅ๋ ฅ์น๋ฅผ ๊ฐ์ง๋๋ค. ๊ฐ ํ๋ ์ด์ด์ ์ด๊ธฐ ๋ฅ๋ ฅ์น๋ ๋ชจ๋ ๋ค๋ฆ ๋๋ค. ๊ฒ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํ๋ฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ์ ๋ฐฐ๊ฒฝ์ ์ซ์๋ ์ด์ ๊ฒฝ์ฐ ๊ณต๊ฒฉ๋ ฅ์, ํ๋ ์ด์ด์ ๊ฒฝ์ฐ ์ด๊ธฐ ๋ฅ๋ ฅ์น๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ ธ๋์ ๋ฐฐ๊ฒฝ์ ์ซ์๋ ํ๋ ์ด์ด์ ๋ฒํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ๋์ ๋ผ์ด๋๋ ๋ค์์ ๊ณผ์ ์ ๊ฑธ์ณ ์งํ๋ฉ๋๋ค.
1-1. ์ฒซ ๋ฒ์งธ ํ๋ ์ด์ด๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ณธ์ธ์ด ํฅํ๊ณ ์๋ ๋ฐฉํฅ๋๋ก ํ ์นธ๋งํผ ์ด๋ํฉ๋๋ค. ๋ง์ฝ ํด๋น ๋ฐฉํฅ์ผ๋ก ๋๊ฐ ๋ ๊ฒฉ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ์๋ ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐฉํฅ์ ๋ฐ๊พธ์ด์ 1๋งํผ ์ด๋ํฉ๋๋ค.
(์ค๋ต)
k ๋ผ์ด๋ ๋์ ๊ฒ์์ ์งํํ๋ฉด์ ๊ฐ ํ๋ ์ด์ด๋ค์ด ํ๋ํ ํฌ์ธํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์ธ์.
์ ๋ ฅ ํ์
์ฒซ ๋ฒ์งธ ์ค์ n, m, k๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค. n์ ๊ฒฉ์์ ํฌ๊ธฐ, m์ ํ๋ ์ด์ด์ ์, k๋ ๋ผ์ด๋์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ดํ n๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฒฉ์์ ์๋ ์ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ค. ๊ฐ ์ค์๋ ๊ฐ๊ฐ์ ํ์ ํด๋นํ๋ n๊ฐ์ ์๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค. ์ซ์ 0์ ๋น ์นธ, 0๋ณด๋ค ํฐ ๊ฐ์ ์ด์ ๊ณต๊ฒฉ๋ ฅ์ ์๋ฏธํฉ๋๋ค.
์ดํ m๊ฐ์ ์ค์ ๊ฑธ์ณ ํ๋ ์ด์ด๋ค์ ์ ๋ณด x, y, d, s๊ฐ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋๋ค. (x, y)๋ ํ๋ ์ด์ด์ ์์น, d๋ ๋ฐฉํฅ, s๋ ํ๋ ์ด์ด์ ์ด๊ธฐ ๋ฅ๋ ฅ์น๋ฅผ ์๋ฏธํ๊ณ ๊ฐ ํ๋ ์ด์ด์ ์ด๊ธฐ ๋ฅ๋ ฅ์น๋ ๋ชจ๋ ๋ค๋ฆ ๋๋ค. ๋ฐฉํฅ d๋ 0๋ถํฐ 3๊น์ง ์์๋๋ก ↑, →, ↓, ←์ ์๋ฏธํฉ๋๋ค.
๊ฐ ํ๋ ์ด์ด์ ์์น๋ ๊ฒน์ณ์ ธ ์ฃผ์ด์ง์ง ์์ผ๋ฉฐ, ํ๋ ์ด์ด์ ์ด๊ธฐ ์์น์๋ ์ด์ด ์กด์ฌํ์ง ์์ต๋๋ค.
- 2 ≤ n ≤ 20
- 1 ≤ m ≤
- 1 ≤ k ≤ 500
- 1 ≤ ์ด์ ๊ณต๊ฒฉ๋ ฅ ≤ 100,000
- 1 ≤ s ≤ 100
- 1 ≤ x, y ≤ n
์ถ๋ ฅ ํ์
k ๋ผ์ด๋ ๋์ ๊ฒ์์ ์งํํ๋ฉด์ ๊ฐ ํ๋ ์ด์ด๋ค์ด ํ๋ํ ํฌ์ธํธ๋ฅผ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํ์ธ์.
์ผ์ฑ ๋นก๊ตฌํ๋ฌธ์ ์ฌ๋ฐ๋ค์...
์๊ณ ๋ฆฌ์ฆ์ ํน๋ณํ ๊ฑฐ ์์ด ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํํด๋ด๋ฉด ๋๋ ๋ฌธ์ ๋ผ์ ์ฌ์ ๊ณ
1์๊ฐ๋ง์ ๊ตฌํ์ ๋๋๋๋ฐ,,
์ฌ์ํ๊ฑฐ ๋ช ๊ฐ ๋์น๋ ๋ฐ๋์ ๋๋ฒ๊น ๋ 1์๊ฐ ์ ๋ ๊ฑธ๋ฆผใ ใ
๊ทธ๋๋ ํด์ค ์๋ณด๊ณ ํ์ด๋ด์ ์๋ฟ๋ฏ!!!!!!
๋์ ํ์ด
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
int m;
int k;
int map[21][21][10]; // ์ด ๋งต(์ต๋ ๊ณต๊ฒฉ๋ ฅ์ธ ์ด๋ถํฐ ๋ด๋ฆผ์ฐจ์)
int pMap[21][21]; // ํ๋ ์ด์ด ์ขํ, ๊ฐ์ ํ๋ ์ด์ด ๋ฒํธ
int pInfo[401][2]; //d๋ ๋ฐฉํฅ, s๋ ํ๋ ์ด์ด์ ์ด๊ธฐ ๋ฅ๋ ฅ์น
int pGun[401]; // ํ๋ ์ด์ด์ ์ด ์ ๋ณด
int point[401]; // ํ๋ ์ด์ด ํฌ์ธํธ ์ ๋ณด
int px[4] = {-1,0,1,0};
int py[4] = {0,1,0,-1}; // 0:↑, 1:→, 2:↓, 3:←
int loserGun;
bool desc(int a, int b) {
return a > b;
}
void checkGun(int player, int x, int y){
if(map[x][y][0]==0) return;
if(pGun[player] >= map[x][y][0]){
return;
}
else{
int low = pGun[player];
pGun[player] = map[x][y][0];
map[x][y][0] = low;
sort(map[x][y], map[x][y]+10, desc);
}
return;
}
pair<int,int> fightPlayers(int newPlayer, int x, int y){
int stayPlayer = pMap[x][y];
int stayPower = pInfo[stayPlayer][1] + pGun[stayPlayer];
int newPower = pInfo[newPlayer][1] + pGun[newPlayer];
if(stayPower == newPower){
if(pInfo[stayPlayer][1] > pInfo[newPlayer][1]) return {stayPlayer, newPlayer};
else return {newPlayer, stayPlayer};
}
if(stayPower > newPower){
point[stayPlayer] += (stayPower-newPower);
return {stayPlayer, newPlayer};
}
else{
point[newPlayer] += (newPower-stayPower);
return {newPlayer, stayPlayer};
}
}
void moveLoser(int loser, int x, int y){
loserGun = pGun[loser];
pGun[loser] = 0;
for(int i=0; i<10; ++i){
if(map[x][y][i]==0) {
map[x][y][i] = loserGun;
break;
}
}
sort(map[x][y], map[x][y]+10, desc); // 0์ธ๋ฑ์ค๊ฐ ์ต๋ ๊ณต๊ฒฉ๋ ฅ์ธ ์ด์ ๊ฐ์ง
for(int i=0; i<4; ++i){
int nx = x + px[pInfo[loser][0]];
int ny = y + py[pInfo[loser][0]];
if(nx<1 || ny<1 || nx>n || ny>n || pMap[nx][ny]>0){
if(pInfo[loser][0]<3) {
pInfo[loser][0]++;
} else pInfo[loser][0] = 0;
}else{
pMap[x][y] = 0;
pMap[nx][ny] = loser;
checkGun(loser, nx, ny);
break;
}
}
}
void getWinner(int winner, int x, int y){
checkGun(winner, x, y);
}
void movePlayer(){
for(int i=1; i<=m; ++i){
bool nextTurn = false;
for(int a=1;a<=n; ++a){
for(int b=1; b<=n; ++b){
if(pMap[a][b] == i){
int move = pInfo[i][0];
int nx = a + px[move];
int ny = b + py[move];
if(nx<1 || ny<1 || nx>n || ny>n){
if(move==0||move==1) {
pInfo[i][0] += 2;
move += 2;
nx = a + px[move];
ny = b + py[move];
} else {
pInfo[i][0] -= 2;
move -= 2;
nx = a + px[move];
ny = b + py[move];
}
}
pMap[a][b] = 0;
if(pMap[nx][ny] == 0) { // ๋น์๋ฆฌ๋ฉด ์ด ํ์ธ
pMap[nx][ny] = i;
checkGun(i, nx, ny);
}
else{ // ํ๋ ์ด์ด๊ฐ ์์ผ๋ฉด ์ธ์
pair<int,int> wl = fightPlayers(i, nx, ny);
moveLoser(wl.second, nx, ny); // ์ง ์ฌ๋ ์ด๋์ํค๊ธฐ
getWinner(wl.first, nx, ny); // ๋ ์ข์ ์ด ํ๋
pMap[nx][ny] = wl.first;
}
nextTurn = true;
break;
}
}
if(nextTurn) break;
}
}
}
int main() {
int x;
int y;
cin >> n >> m >> k; // n ๊ฒฉ์์ ํฌ๊ธฐ, m ํ๋ ์ด์ด์ ์, k ๋ผ์ด๋์ ์
for(int i=1; i<=n; ++i){
for(int j=1; j<=n; ++j) cin>>map[i][j][0];
}
for(int i=1; i<=m; ++i){
cin>>x>>y;
pMap[x][y] = i;
cin>>pInfo[i][0]>>pInfo[i][1];
}
for(int i=0; i<k; ++i){
movePlayer();
// cout <<"--------------point-----\n";
// for (int i = 1; i<=m; ++i){
// cout << point[i] << " ";
// }
// cout <<"-map-\n";
// for (int i = 1; i<=n; ++i){
// for (int j = 1; j<=n; ++j){
// cout << map[i][j][0] << " ";
// } cout <<"\n";
// }
// cout <<"--player--\n";
// for (int i = 1; i<=n; ++i){
// for (int j = 1; j<=n; ++j){
// cout << pMap[i][j] << " ";
// } cout <<"\n";
// }
}
for (int i = 1; i<=m; ++i){
cout << point[i] << " ";
}
return 0;
}