参考http://www.cnblogs.com/qscqesze/p/5925893.html
题意
给你n个数,你可以操作k次,每次使得一个数增加x或者减小x
你要使得最后所有数的乘积最小,问你最后这个序列长什么样子。
#define rson md+1,rr,rs
set<pii>se;
LL a[N];
int main(){
int n,k,x;
sf("%d%d%d",&n,&k,&x);
int sig=0;
rep(i,1,n){
cin>>a[i];
if(a[i]<0)sig^=1;
se.insert(MP(abs(a[i]),i));
}
for(int i=1;i<=k;++i){
int pos=se.begin()->second;
se.erase(se.begin());
if(a[pos]<0)sig^=1;
if(sig)a[pos]+=x;
else a[pos]-=x;
if(a[pos]<0)sig^=1;
se.insert(MP(abs(a[pos]),pos));
}
for(int i=1;i<=n;++i){
cout<<a[i]<<' ';
}puts("");
}
本文介绍了一种通过增加或减少特定数值来调整序列中各元素以获得最小乘积的方法。给定一系列整数和允许的操作次数,算法通过适当增加或减少指定值来优化序列,确保最终序列的乘积最小。
1347

被折叠的 条评论
为什么被折叠?



