样例3
2023-08-19 01:09:35
发布于:湖北
14阅读
0回复
0点赞
样例3输出应该是17
此题如果n%2==1,数列n的第k项为nk
输出=|1-n1|+|1-n2|+|1-n3|+.......+|1-nk|
#include<iostream>
using namespace std;
int abs(int x){
if(x>=0){
return x;
}else{
return -x;
}
}
int main(){
int n;
cin >> n;
int l[n];
for(int i=0;i<n;i++){
cin >> l[i];
}
if(n%2==1){
int c=0;
for(int i=0;i<n;i++){
c+=abs(1-l[i]);
}
cout << c;
}
if(n%2==0){
int c1=0,c2=0;
for(int i=0;i<n;i++){
c1+=abs(1-l[i]);
c2+=abs(1+l[i]);
}
if(c1>=c2){
cout << c2;
}else if(c1<=c2){
cout << c1;
}
}
return 0;
}
全部评论 1
初始数据
序列长度 n=5,元素为 [-5, -3, 5, 3, 0]
逐个处理元素(计算基础代价)
第一个元素 -5(负数):
最优调整为 -1(距离最近的负奇数)
代价:-1 - (-5) = 4(需要加 4 次)
负数计数 c=1
最小符号调整代价 m=2(-1→1 的代价)
第二个元素 -3(负数):
最优调整为 -1
代价:-1 - (-3) = 2(需要加 2 次)
负数计数 c=2
最小符号调整代价 m=2(保持不变)
第三个元素 5(正数):
最优调整为 1
代价:5 - 1 = 4(需要减 4 次)
负数计数 c=2(不变)
最小符号调整代价 m=2(保持不变)
第四个元素 3(正数):
最优调整为 1
代价:3 - 1 = 2(需要减 2 次)
负数计数 c=2(不变)
最小符号调整代价 m=2(保持不变)
第五个元素 0:
最优调整为 1
代价:1(需要加 1 次)
负数计数 c=2(不变)
检查符号是否需要调整
当前负数计数 c=2(偶数),乘积为 (-1)×(-1)×1×1×1 = 1,已经满足条件
不需要额外调整符号
总代价计算
基础代价总和:4 + 2 + 4 + 2 + 1 = 132025-10-30 来自 广东
0








有帮助,赞一个