题解:CF639B Bear and Forgotten Tree 3
CF639B 题目传送门
题目大意
请你构造一棵包含
解决方法
首先考虑特殊情况:
- 特判一:当
n=2 时,只有h=1 且d=1 可以。 - 特判二:当
2 \times h < d 时,因为无解,所以输出−1 。
其他情况正常考虑:构造一棵
代码展示
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, d, h;//建议scanf,更快
scanf("%d%d%d", &n, &d, &h);
if(d > (2 * h) || (d == h && h == 1 && n > 2))
//1.通过样例可知d必须<=2h若不满足就输出-1
//2.当d=h=1且n>2时,也输出-1
{
printf("-1\n");//建议printf,更快
return 0;
}
for(int i = 2; i <= h + 1; i++)
printf("%d %d\n", i-1, i);
for(int i = h + 2; i <= d + 1; i++)
//分类讨论
if(i == h + 2) printf("1 %d\n", i);
else printf("%d %d\n", i-1, i);
for(int i = d + 2; i <= n; i++)
if(d != h) printf("1 %d\n", i);
else printf("2 %d\n", i);
return 0;
}