これは即答でした。
https://yukicoder.me/problems/no/689
問題
正整数Kが与えられる。
頂点1~NのN頂点からなる有向グラフを考える。
辺は頂点番号の小さい方から大きい方にのみ張ることができるとする。
頂点1→Nに至る経路がK通りとなるようなグラフを構築せよ。
解法
似たようなのCFで見たなと思ってたら、GCJだった。
Google Code Jam 2016 Round1C : B. Slides! - kmjp's blog
int K; int N,M; int A[32]; vector<pair<int,int>> V; void solve() { int i,j,k,l,r,x,y; string s; cin>>K; A[1]=1; for(i=2;i<=31;i++) { A[i]=1<<(i-2); for(j=1;j<i;j++) V.push_back({j,i}); } for(i=31;i>=2;i--) { if(K>=A[i]) { V.push_back({i,32}); K-=A[i]; } } cout<<32<<" "<<V.size()<<endl; FORR(v,V) cout<<v.first<<" "<<v.second<<endl; }
まとめ
CFのはもう少し違うパターンだったかな。