社区讨论
为什么测试点11期待的结果带负号?
P2234[HNOI2002] 营业额统计参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mklyqhou
- 此快照首次捕获于
- 2026/01/20 10:16 4 周前
- 此快照最后确认于
- 2026/01/23 20:45 4 周前
根据题意描述,每天的最小波动等于和前面某天最小差距,就是在众多绝对值里面取最小值,可是为什么测试点11的期待结果第一个符号是符号?前面10个测试点都过了,就差第11个测试点,期待并感谢各位大佬指教!
待纠错代码如下:
CPP#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=32768;
ll n,a[N],ans;//利用插入排序的思想计算最终位置左右哪边差值小
int main(){
ios::sync_with_stdio(0);//取消输入输出流同步
cin.tie(NULL);//解除cin和cout绑定
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];//输入
if(a[i]>=a[i-1]){//直接接到末尾即可
ans+=abs(a[i]-a[i-1]);//更新答案
continue;
}
//否则,接入开头到中间某个位置
int pos=-1;//记录a[i]的最终位置
for(int j=i;j>=2;j--){//往左插入到合适位置
if(a[j-1]>a[j]){
swap(a[j-1],a[j]);//交换
pos=j-1;//更新位置
}
else break;
}
ll dk=abs(a[pos]-a[pos+1]);//初始化
if(pos-1>=1) dk=min(dk,abs(a[pos-1]-a[pos]));//避免越界
ans+=dk;//更新答案
}
//输出检验
//for(int i=1;i<=n;i++) cout<<a[i]<<' '; cout<<'\n';
cout<<ans;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...