//根据题意构造数组
//因为有坑一直 wa
//当 wow 的次数等于 0 的时候,如果 oh 的次数等于 n-1, 则无法构造该数组,因为第二个数会转化成为符合 b 的条件
//做的时候考虑不全,只考虑了 n=2 的情况
#include<stdio.h>
int c[110];
int main()
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
if( n == 2 && b==0 && a!=0 ) //特判
{
printf("-1\n");
return 0;
}
int max=1,sum=1;
int cnt=1;
c[0]=1;
if( n >2 && b==0 && a == n-1) // 特判
{
printf("-1\n");
return 0;
}
if( n > 2 && b==0 && a!=0) // 对于 b==0 而 a !=0 ,需要先将数组前两个构造出来
{
c[cnt++]=1;
max=1;
sum=2;
}
for(int i=1;i<=b;i++) // 先构造 b 的情况,这样能使每个数尽量的小
{
c[ cnt++ ] = sum + 1;
max = sum + 1;
if( max > 50000)
{
printf("-1\n");
return 0;
}
sum = sum + sum + 1;
}
for(int i=1;i<=a;i++) // 再构造 a
{
c[ cnt ++ ] = ++max;
if( max > 50000)
{
printf("-1\n");
return 0;
}
}
int tmp=n-a-b-1;
while( tmp-- ) //最后的公主没有表示的补上1
{
c[ cnt++ ] = 1;
}
printf("%d",c[0]);
for(int i=1;i<n;i++)
printf(" %d",c[i]);
return 0;
}
codeforces 148c
最新推荐文章于 2019-10-24 12:02:22 发布