细节不少的构造题。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,d,h,p=1,ret=1; int main() { scanf("%d%d%d",&n,&d,&h); if (2*h<d) {printf("-1 ");return 0;} if (d==1) { if (n==2) printf("1 2 "); else printf("-1 "); return 0; } for (int i=1;i<=h;i++) printf("%d %d ",i,i+1); p=h+2; for (int i=1;i<=d-h;i++) { printf("%d %d ",ret,p); ret=p;p++; } if (p!=n+1) { if (d!=h) { for (int i=p;i<=n;i++) printf("1 %d ",i); } else { for (int i=p;i<=n;i++) printf("2 %d ",i); } } return 0; }