标签:
1 ///太渣,看了题解才知道怎么做,自己想感觉想不清楚 2 ///题解:首先在给出的序列里判断小于median的个数,若大于(n-1)/2,则不满足,否则看另一个条件 3 ///这样我们可以把中位数左边还要添加的数字构造成1,右边的数字全构造成median,这样中位数保证不会小于y,再看总和是否超过即可 4 #include<iostream> 5 #include<stdio.h> 6 #include<string> 7 #include<vector> 8 using namespace std; 9 int main() 10 { 11 12 int a,n,p,k,x,y,low = 0,sum = 0; 13 cin>>n>>k>>p>>x>>y; 14 for(int i = 0 ; i<k ; i++) 15 { 16 cin>>a; 17 if(a<y) low++; 18 sum += a; 19 } 20 if(low>(n-1)/2) printf("-1\n"); 21 else 22 { 23 int left = min((n-1)/2-low,n-k); 24 ///如果不加min 9 7 2 14 1 25 /// 2 2 2 1 1 2 2 这组数据会出错误 26 int right = n-k - left; 27 if(left+y*right+sum>x) printf("-1\n"); 28 else 29 { 30 vector<int> v; 31 for(int i = 0;i<left;i++) 32 v.push_back(1); 33 for(int i = 0;i<right;i++) 34 v.push_back(y); 35 int len = v.size(); 36 for(int i = 0;i<len;i++) 37 printf("%d%s",v[i],i==len-1?"\n":" "); 38 } 39 } 40 return 0; 41 }
标签:
原文地址:http://www.cnblogs.com/jiachinzhao/p/4546950.html