N coding

[Atcoder] ARC 102D - All Your Paths are Different Lengths 본문

PS

[Atcoder] ARC 102D - All Your Paths are Different Lengths

NYWOO19 2018. 9. 13. 14:51

되게 막연하게 생각되었는데

처음에는 10^6이고 총 사용할 수 있는 엣지가 60개니까 1 -> 2 로 갈 때 0 ~ 9 * 10^i로 표현하려고 했다.

근데 10진수로 하니까 L보다 큰 수를 막는 게 너무 어려워서 2진수로 방향을 틀었다

이때 최대 노드 N이 20이고, 10^6이 최소 20개의 비트로 표현되므로 딱 맞다.



좀 거지같이 그리긴했지만

이런 느낌으로 표현하면 된다.




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
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
 
struct Edge {
    int v, u, w;
};
 
int N, M, L, LL;
//10의 n승
vector<Edge> res;
int Binary[30];
 
int main() {
    cin.tie(NULL); cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    cin >> L;
    L--; LL = L;
    int cnt = 0;
    while (L) {
        Binary[cnt++= (L % 2);
        L /= 2;
    }
 
    if (LL == (1 << cnt) - 1) {
        for (int i = 1; i <= cnt; ++i) {
            res.push_back({ i, i + 10 });
            res.push_back({ i, i + 1, (1 << (i - 1)) });
        }
        cout << cnt + 1 << ' ' << res.size() << '\n';
        for (auto ans : res) {
            cout << ans.v << ' ' << ans.u << ' ' << ans.w << '\n';
        }
        return 0;
    }
    N = cnt;
    for (int i = 1; i < N; ++i) {
        res.push_back({ i, i + 10 });
        res.push_back({ i, i + 1, (1 << (i - 1)) });
    }
 
 
    res.push_back({ 1, N, LL });
    for (int i = 0; i < N-1++i) {
        if (Binary[i]) {
            LL -= (1 << i);
            res.push_back({ i+1, N, LL });
        }
    }
 
    cout << N << ' ' << res.size() << '\n';
    for (auto ans : res) {
        cout << ans.v << ' ' << ans.u << ' ' << ans.w << '\n';
    }
 
    return 0;
}
cs




'PS' 카테고리의 다른 글

3176_도로네트워크  (0) 2018.09.21
5480_전함  (0) 2018.09.21
1575_졸업  (0) 2018.09.07
9376_탈옥  (0) 2018.09.06
1886_프리즌 브레이크/Evacuation  (0) 2018.09.06