错误笑谈
查看原帖
错误笑谈
782904
哈哈人生楼主2024/8/3 14:24
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,l[20005],r[20005],dp[20005][2];
int jl1(int x,int l,int r){
	if(r<=x)return x-l;
	else return r-x+r-l;
}
int jl2(int x,int l,int r){
	if(x<=l)return r-x;
	else x-l+r-l;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>l[i]>>r[i];
	dp[1][0]=r[1]-1+r[1]-l[1],dp[1][1]=r[1]-1;
	for(int i=2;i<=n;i++){
		dp[i][0]=min(dp[i-1][0]+jl1(l[i-1],l[i],r[i]),dp[i-1][1]+jl1(r[i-1],l[i],r[i]))+1;
		dp[i][1]=min(dp[i-1][0]+jl2(l[i-1],l[i],r[i]),dp[i-1][1]+jl2(r[i-1],l[i],r[i]))+1;
	}
	cout<<min(dp[n][0]+n-l[n],dp[n][1]+n-r[n]);
	return 0;
}

这份代码本人调了半个小时不知道错误,对照了题解才发现:

int jl2(int x,int l,int r){
	if(x<=l)return r-x;
	else x-l+r-l;//这里没return。。。
}

所以——警示后人:注意函数 else 的 return。(本人已经犯了两次类似错误了)

不过话说开了O2优化为什么没报RE呢?

2024/8/3 14:24
加载中...