题目链接:http://codeforces.com/problemset/problem/148/C点击打开链接
题目要求小于50000
2^15==30000+ 因此不会超 但是正是因为这个临界 坑点很多
我们可以这样想 因为最大不会超 因此可以1 2 4 。。吧b的个数造出来
再造a 每次+1
但是因为唯一特殊的2-1=1&&2》sum(1)
因此要判断特殊条件
给几个特例
1 0 0
2 1 0
3 1 0
其中1 0 0 可以构造
但如果存在b=0并且n=a-1 如2 1 0 则不存在 因为必定存在前两个数 第二个数即大于第一个数 又比他总和大
然后如果是b=0且n!=a-1时 则需要先把剩余数输出 使得不会出现前两位的重叠情况
#include <bits/stdc++.h>
using namespace std;
int a[111111];
int main()
{
int n,a,b;
cin>>n>>a>>b;
if(n==a+1)
{
if(a!=0)
{
cout << -1 << endl;
return 0;
}
}
if(b==0)
{
int num=1;
int cnt=n-a-b;
b++;
cnt--;
while(cnt--)
{
cout << "1" << " ";
}
while(b)
{
cout << num << " ";
b--;
if(b)
num<<=1;
}
while(a)
{
cout << ++num << " ";
a--;
}
return 0;
}
int num=1;
int cnt=n-a-b;
b++;
cnt--;
while(b)
{
cout << num << " ";
b--;
if(b)
num<<=1;
}
while(a)
{
cout << ++num << " ";
a--;
}
while(cnt--)
{
cout << "1" << " ";
}
}