游游拿到了一个数组,她每次操作可以使得一个元素加1,另一个元素减1。 游游希望最终数组的每个元素大小都在[l,r]范围内,她想知道自己最少多少次操作可以达成目标?
区块链毕设网qklbishe.com为您提供问题的解答
游游拿到了一个数组,她每次操作可以使得一个元素加1,另一个元素减1。
游游希望最终数组的每个元素大小都在[l,r]范围内,她想知道自己最少多少次操作可以达成目标?
#include <bits/stdc++.h>
using namespace std;
int k,n,l,r;
vector<int> v;
void print(vector<int>v){
for(int i=0;i<n;i++)cout<<v[i]<<‘ ‘;
cout<<endl;
}
typedef long long int64 ;
int main() {
cin>>k;
while(k–){
cin>>n>>l>>r;
v.resize(n);
for(int i=0;i<n;i++)cin>>v[i];
sort(v.begin(),v.end());
// print(v);
// for(int i=0;i<n;i++)cout<<valid(v[i])<<‘ ‘;
int res=0;
int i=0,j=n-1;
if(v[i]>r||v[j]<l){
cout<<-1<<endl;
continue;
}
int64 a=0,b=0,c=0,asum=0,bsum=0,csum=0;
for(int i=0;i<n;i++){
int e=v[i];
if(e<l){
asum+=l-e;
a++;
}else if(e>r){
csum+=e-r;
c++;
}else {
b++;
bsum+=e-l;
}
}
// cout<<a<<asum<<endl;
// cout<<b<<bsum<<endl;
// cout<<c<<csum<<endl;
if(csum<asum){
if(asum-csum<=bsum+c*(r-l) ){
cout<<asum<<endl;
}
else cout<<-1<<endl;
}
else if(csum>asum){
if(csum-asum<=(a+b)*(r-l) -bsum){
cout<<csum<<endl;
}
else cout<<-1<<endl;
}
else {
cout<<asum<<endl;
}
}
}
// 64 位输出请用 printf("%lld")
using namespace std;
int k,n,l,r;
vector<int> v;
void print(vector<int>v){
for(int i=0;i<n;i++)cout<<v[i]<<‘ ‘;
cout<<endl;
}
typedef long long int64 ;
int main() {
cin>>k;
while(k–){
cin>>n>>l>>r;
v.resize(n);
for(int i=0;i<n;i++)cin>>v[i];
sort(v.begin(),v.end());
// print(v);
// for(int i=0;i<n;i++)cout<<valid(v[i])<<‘ ‘;
int res=0;
int i=0,j=n-1;
if(v[i]>r||v[j]<l){
cout<<-1<<endl;
continue;
}
int64 a=0,b=0,c=0,asum=0,bsum=0,csum=0;
for(int i=0;i<n;i++){
int e=v[i];
if(e<l){
asum+=l-e;
a++;
}else if(e>r){
csum+=e-r;
c++;
}else {
b++;
bsum+=e-l;
}
}
// cout<<a<<asum<<endl;
// cout<<b<<bsum<<endl;
// cout<<c<<csum<<endl;
if(csum<asum){
if(asum-csum<=bsum+c*(r-l) ){
cout<<asum<<endl;
}
else cout<<-1<<endl;
}
else if(csum>asum){
if(csum-asum<=(a+b)*(r-l) -bsum){
cout<<csum<<endl;
}
else cout<<-1<<endl;
}
else {
cout<<asum<<endl;
}
}
}
// 64 位输出请用 printf("%lld")
26:24
以上就是关于问题游游拿到了一个数组,她每次操作可以使得一个元素加1,另一个元素减1。
游游希望最终数组的每个元素大小都在[l,r]范围内,她想知道自己最少多少次操作可以达成目标?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训