티스토리 뷰
SW Expert Academy :: SWEA :: 5648 :: 원자 소멸 시뮬레이션
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct atom {
int n, i, j, d, e;
float c;
};
int N, ans;
vector <atom> v;
vector <pair<float, pair<int, int>>> ev;
inline void check(atom n1, atom n2) {
if (n1.d == 0) {
if (n2.d == 1 && n1.j == n2.j && n1.i<n2.i) {
ev.push_back(make_pair(abs((n1.i - n2.i) / 2.0), make_pair(n1.n, n2.n)));
}
else if (n2.d == 3 && n2.i>n1.i && n2.j<n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
else if (n2.d == 2 && n2.i>n1.i && n2.j>n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
}
else if (n1.d == 1) {
if (n2.d == 0 && n1.j == n2.j && n1.i > n2.i) {
ev.push_back(make_pair(abs((n1.i - n2.i) / 2.0), make_pair(n1.n, n2.n)));
}
else if (n2.d == 3 && n2.i<n1.i && n2.j<n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
else if (n2.d == 2 && n2.i<n1.i && n2.j>n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
}
else if (n1.d == 2) {
if (n2.d == 3 && n1.i == n2.i && n1.j > n2.j) {
ev.push_back(make_pair(abs((n1.j - n2.j) / 2.0), make_pair(n1.n, n2.n)));
}
else if (n2.d == 0 && n2.i<n1.i && n2.j<n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
else if (n2.d == 1 && n2.i>n1.i && n2.j<n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
}
else if (n1.d == 3) {
if (n2.d == 2 && n1.i == n2.i && n1.j < n2.j) {
ev.push_back(make_pair(abs((n1.j - n2.j) / 2.0), make_pair(n1.n, n2.n)));
}
else if (n2.d == 1 && n2.i>n1.i && n2.j>n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
else if (n2.d == 0 && n2.i<n1.i && n2.j>n1.j && (abs(n1.i - n2.i) == abs(n1.j - n2.j))) {
ev.push_back(make_pair(abs(n1.i - n2.i), make_pair(n1.n, n2.n)));
}
}
}
void input() {
v.clear(); ev.clear();
cin >> N; ans = 0; atom a;
for (int i = 0; i < N; i++) {
cin >> a.j >> a.i >> a.d >> a.e; a.c = 0; a.n = i;
v.push_back(a);
}
}
int main() {
std::ios::sync_with_stdio(false); cin.tie(0);
int T; cin >> T;
for (int tc = 1; tc <= T; tc++) {
input();
for (int i = 0; i < N - 1; i++) for (int j = i + 1; j < N; j++)check(v[i], v[j]);
if (ev.size() > 0) {
sort(ev.begin(), ev.end());
float num;
for (int i = 0; i < ev.size(); i++) {
num = ev[i].first;
if (!(v[ev[i].second.first].c != 0 && v[ev[i].second.first].c != num)
&& !(v[ev[i].second.second].c != 0 && v[ev[i].second.second].c != num)) {
v[ev[i].second.first].c = num; v[ev[i].second.second].c = num;
}
}
for (int i = 0; i < N; i++) if (v[i].c) ans += v[i].e;
}
cout << "#" << tc << " " << ans << endl;
}
return 0;
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA 5658] 보물상자 비밀번호 (0) | 2018.09.21 |
---|---|
[SWEA 5644] 무선 충전 (0) | 2018.09.21 |
[SWEA 5650] 핀볼 게임 (0) | 2018.09.19 |
[SWEA 5521] 상원이의 생일파티 (0) | 2018.09.07 |
[SWEA 5436] 동욱이의 조판하기 (0) | 2018.08.29 |
- Total
- Today
- Yesterday
- string
- 게리맨더링 2
- 역량 테스트
- 17142
- STL
- 시간 복잡도
- DP
- 2018 카카오 블라인드 채용
- SW Expert Academy
- 17143
- 2018 KAKAO BLIND RECRUITMENT
- scanf
- SWEA
- 17144
- 17140
- 팁
- 미세먼지 안녕!
- 백준
- 이차원 배열과 연산
- 새로운 게임 2
- 연구소 3
- DFS
- boj
- hackerrank
- 17779
- 알고리즘
- 입출력
- 삼성
- 17837
- 트렌드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |