Eqaulize Prices
There are n products in the shop. The price of the ii-th product is aiai. The owner of the shop wants to equalize the prices of all products. However, he wants to change prices smoothly.
In fact, the owner of the shop can change the price of some product ii in such a way that the difference between the old price of this product aiai and the new price bibi is at most kk. In other words, the condition |ai−bi|≤k|ai−bi|≤k should be satisfied (|x||x| is the absolute value of xx).
He can change the price for each product not more than once. Note that he can leave the old prices for some products. The new price bibiof each product ii should be positive (i.e. bi>0bi>0 should be satisfied for all ii from 11 to nn).
Your task is to find out the maximum possible equal price BB of all productts with the restriction that for all products the condiion |ai−B|≤k|ai−B|≤k should be satisfied (where aiai is the old price of the product and BB is the same new price of all products) or report that it is impossible to find such price BB.
Note that the chosen price BB should be integer.
You should answer qq independent queries.
The first line of the input contains one integer qq (1≤q≤1001≤q≤100) — the number of queries. Each query is presented by two lines.
The first line of the query contains two integers nn and kk (1≤n≤100,1≤k≤1081≤n≤100,1≤k≤108) — the number of products and the value kk. The second line of the query contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1081≤ai≤108), where aiai is the price of the ii-th product.
Print qq integers, where the ii-th integer is the answer BB on the ii-th query.
If it is impossible to equalize prices of all given products with restriction that for all products the condition |ai−B|≤k|ai−B|≤k should be satisfied (where aiai is the old price of the product and BB is the new equal price of all products), print -1. Otherwise print the maximum possible equal price of all products.
4
5 1
1 1 2 3 1
4 2
6 4 8 5
2 2
1 6
3 5
5 2 5
2
6
-1
7
In the first example query you can choose the price B=2B=2. It is easy to see that the difference between each old price and each new price B=2B=2 is no more than 11.
In the second example query you can choose the price B=6B=6 and then all the differences between old and new price B=6B=6 will be no more than 22.
In the third example query you cannot choose any suitable price BB. For any value BB at least one condition out of two will be violated: |1−B|≤2|1−B|≤2, |6−B|≤2|6−B|≤2.
In the fourth example query all values BB between 11 and 77 are valid. But the maximum is 77, so it's the answer.
Analysis:
It is very intuitive that the maximum price we can obtain is min+kmin+k where minmin is the minimum value in the array. For this price we should check that we can change prices of all products to it. It can be done very easily: we can just check if each segment [ai−k;ai+k][ai−k;ai+k] covers the point min+kmin+k. But this is not necessary because if we can change the price of the maximum to this value (min+kmin+k) then we can change each price in the segment [min;max][min;max] to this value. So we just need to check that min+k≥max−kmin+k≥max−k and if it is then print min+kmin+k otherwise print -1.
codes:
#include<bits/stdc++.h>
using namespace std;
int main(){
#ifdef _DEBUG
freopen("input.txt","r",stdin);
#endif int q;
cin>>q;
for(int i=0;i<q;i++){
int n,k;
cin>>n>>k;
vector<int> a(n);
for(int j=0;j<n;j++){
cin>>a[j];
}
int mn= *min_element(a.begin(),a.end());
int mx= *max_element(a.begin(),a.end());
if(mx-mn>2*k) cout<<-1<<endl;
else cout<<mn+k<<endl;
}
return 0;
}
向量数组(vector<int> a)自带有求取最大值( *max_element(a.begin(),a.end())和最小值(*min_element(a.begin(),a.end()))的函数哦!!!
Eqaulize Prices的更多相关文章
- hdu 4163 Stock Prices 水
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) #de ...
- BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )
我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...
- Kaggle竞赛 —— 房价预测 (House Prices)
完整代码见kaggle kernel 或 Github 比赛页面:https://www.kaggle.com/c/house-prices-advanced-regression-technique ...
- Kaggle:House Prices: Advanced Regression Techniques 数据预处理
本博客是博主在学习了两篇关于 "House Prices: Advanced Regression Techniques" 的教程 (House Prices EDA 和 Comp ...
- 【BZOJ】【4145】【AMPPZ2014】The Prices
状压DP/01背包 Orz Gromah 容易发现m的范围很小……只有16,那么就可以状压,用一个二进制数来表示买了的物品的集合. 一种简单直接的想法是:令$f[i][j]$表示前$i$个商店买了状态 ...
- hdu 4163 Stock Prices 花式排序
Stock Prices Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 【BZOJ4145】[AMPPZ2014]The Prices 状压DP
[BZOJ4145][AMPPZ2014]The Prices Description 你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i ...
- CF1234A Equalize Prices
洛谷 CF1234A Equalize Prices Again 洛谷传送门 题目描述 You are both a shop keeper and a shop assistant at a sma ...
- Codeforces Round #590 (Div. 3) A. Equalize Prices Again
链接: https://codeforces.com/contest/1234/problem/A 题意: You are both a shop keeper and a shop assistan ...
随机推荐
- PHPStorm使用XDebug调试
(一)php安装xdebug扩展,PHPStorm+XDebug单步调试 (二)PHPStorm配置XDebug (三)PHPStorm使用XDebug调试 (四)PhpStorm+Xdebug配置单 ...
- BZOJ4668 冷战(LCT维护最小生成树)
BZOJ4668 冷战(LCT维护最小生成树) 题面 自己找去 HINT 这道题就是动态加边,然后查询u,v两点最早什么时候联通,强制在线.思考一下,最早什么时候联通不就等同于维护最小生成树吗(把这条 ...
- H5_0019:JS中定义json结构
"7HKm": function(e, a, d) { "use strict"; Object ...
- MarkDown图文编辑系列教程(二)
一.写在前面 引言 本文是我写的MarkDown系列教程的第二篇,前一篇的地址:MarkDown图文编辑系列教程(一) 读完本篇,你将获得 学会使用markdown语法进行:区块引用(一种常用的引用格 ...
- 修改video样式代码
/*video::-webkit-media-controls-fullscreen-button {display: none; //更改是否显示全屏按钮}*//*video::-webkit-me ...
- 安装oracle client及配置
一.下载oracle client 下载地址:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/1120 ...
- C#中怎样获取System.Drawing.Color的所有颜色对象并存到数组中
场景 需要在生成一组多条曲线时,随机从一颜色数组中取颜色,至少一百种颜色以上. 而System.Drawing.Color自带140多种颜色 那么怎样将其自带的颜色对象取出并存在数组中. 注: 博客主 ...
- 01-SV入门及仿真环境搭建
1.SV入门 参考书籍<SystemVerilog验证 测试平台编写指南> [美]克里斯·斯皮尔 著 2.仿真环境搭建 仿真工具:modelsim se 2019.2,它不仅支持Veril ...
- BK: Data mining
data ------> knowledge Are all patterns interesting? No. only a small fraction of the patterns po ...
- DataGridView 定位到指定行
//定位到指定行(样式)dataGridView1.ClearSelection();dataGridView1.Rows[selectIndex].Selected = true; //让指定行处于 ...