#include <bits/stdc++.h> using namespace std; int fib[] = { 1,1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733 }; int contains(vector<int>& f, int value) { for(int i = 0; i < f.size(); i++) { if(f[i] == value) { return i; } } return -1; } vector<int> toFib(int n) { vector<int> wynik; int i = 0; while(n > 0) { while (n < fib[43-i]) { i++; } wynik.push_back(44-i); n = n-fib[43-i]; } return wynik; } int main() { int graph[101][2]; for(int i = 1; i <= 100; i++) { graph[i][0] = -1; graph[i][1] = -1; } int k; scanf("%d",&k); vector<int> f = toFib(k); vector<int> vertices; int top = 1; while (vertices.size() < f.size() && top < 48) { int cont = contains(f,top); if(cont!=-1) { f[cont] = -1; vertices.push_back(top); graph[top][0] = 100; int next_free_vertex = 47+vertices.size(); graph[top][1] = next_free_vertex; graph[next_free_vertex][0] = top+2; graph[next_free_vertex][1] = top+1; } else { graph[top][0] = top+1; graph[top][1] = top+2; } top++; } printf("%d\n",100); for(int i = 1; i <= 100; i++) { printf("%d %d\n",graph[i][0],graph[i][1]); } }
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 66 67 68 69 70 71 | #include <bits/stdc++.h> using namespace std; int fib[] = { 1,1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733 }; int contains(vector<int>& f, int value) { for(int i = 0; i < f.size(); i++) { if(f[i] == value) { return i; } } return -1; } vector<int> toFib(int n) { vector<int> wynik; int i = 0; while(n > 0) { while (n < fib[43-i]) { i++; } wynik.push_back(44-i); n = n-fib[43-i]; } return wynik; } int main() { int graph[101][2]; for(int i = 1; i <= 100; i++) { graph[i][0] = -1; graph[i][1] = -1; } int k; scanf("%d",&k); vector<int> f = toFib(k); vector<int> vertices; int top = 1; while (vertices.size() < f.size() && top < 48) { int cont = contains(f,top); if(cont!=-1) { f[cont] = -1; vertices.push_back(top); graph[top][0] = 100; int next_free_vertex = 47+vertices.size(); graph[top][1] = next_free_vertex; graph[next_free_vertex][0] = top+2; graph[next_free_vertex][1] = top+1; } else { graph[top][0] = top+1; graph[top][1] = top+2; } top++; } printf("%d\n",100); for(int i = 1; i <= 100; i++) { printf("%d %d\n",graph[i][0],graph[i][1]); } } |