#include <bits/stdc++.h> using namespace std; int n = 100, k, l; set <pair <int, int> > s; vector <int> gr[10001]; void bgr() { for(int i = 1; i < 100; i++) gr[i].push_back(i + 1); s.insert({1, 100}); int av = 98, cap = 1; while(cap < k) { set <pair <int, int> >::iterator it = s.lower_bound({k - cap, 101}); it--; if((*it).second == av + 1) { set <pair <int, int> >::iterator tym = it; tym++; if(tym != s.end()) { it++; if((*it).first > k - cap) { it--; if(it != s.begin()) it--; else av--; } } else if(it != s.begin()) it--; else av--; } cap += (*it).first; gr[av].push_back((*it).second); s.insert({cap, av}); av--; } } int main() { scanf("%d", &k); bgr(); printf("100\n"); for(int v = 1; v <= 100; v++) { for(auto& u : gr[v]) printf("%d ", min(u, n)); for(int i = 2; i > gr[v].size(); i--) printf("-1 "); printf("\n"); } }
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 72 73 74 75 | #include <bits/stdc++.h> using namespace std; int n = 100, k, l; set <pair <int, int> > s; vector <int> gr[10001]; void bgr() { for(int i = 1; i < 100; i++) gr[i].push_back(i + 1); s.insert({1, 100}); int av = 98, cap = 1; while(cap < k) { set <pair <int, int> >::iterator it = s.lower_bound({k - cap, 101}); it--; if((*it).second == av + 1) { set <pair <int, int> >::iterator tym = it; tym++; if(tym != s.end()) { it++; if((*it).first > k - cap) { it--; if(it != s.begin()) it--; else av--; } } else if(it != s.begin()) it--; else av--; } cap += (*it).first; gr[av].push_back((*it).second); s.insert({cap, av}); av--; } } int main() { scanf("%d", &k); bgr(); printf("100\n"); for(int v = 1; v <= 100; v++) { for(auto& u : gr[v]) printf("%d ", min(u, n)); for(int i = 2; i > gr[v].size(); i--) printf("-1 "); printf("\n"); } } |