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
| #include <bits/stdc++.h>
using namespace std; typedef pair<int, int> pii;
void run(int n){ printf("%d %d\n", n, n); for(int i = 2; i <= n; i++){ printf("%d %d\n", i - 1, i); } printf("1 %d\n", n); }
void run(int n, int m){ vector<pii> e; for(int i = 1; i <= n; i++){ for(int j = i + 1; j <= n; j++){ e.push_back({i, j}); } } for(int i = n + 2; i <= n + m; i++){ e.push_back({i, i - 1}); } e.push_back({1, n + 1}); e.push_back({n, n + m}); printf("%d %d\n", n + m, (int)e.size()); for(pii i : e){ printf("%d %d\n", i.first, i.second); } }
void solve(){ int k; scanf("%d", &k); if(k == 1){ printf("2 1\n1 2\n"); return; } if(k == 2){ printf("4 4\n1 3\n2 3\n3 4\n1 2\n"); return; } if(k <= 20){ run(k); }else{ for(int i = 2; i <= 20; i++){ for(int j = 2; j <= 20; j++){ if(i + j > 20) break; int res = i * (i - 1) / 2 - 1 + j - 1 + 2 * (i - 1); if(res == k){ run(i, j); return; } } } } }
int main(){ int T = 1; while(T--) solve(); return 0; }
|