为啥前缀和这个思路不对啊
  • 板块P3406 海底高铁
  • 楼主ldufwh
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/1/8 12:34
  • 上次更新2023/10/28 12:40:30
查看原帖
为啥前缀和这个思路不对啊
659108
ldufwh楼主2022/1/8 12:34
#include <bits/stdc++.h>
using namespace std;

int a[222222]={0},b[222222]={0},c[222222]={0};
long long r1[222222]={0},r1sum[222222]={0};
long long r2[222222]={0},r2sum[222222]={0};
int n,m,pur[222222]={0};

int main()
{

	long long sum1=0,sum2=0;
	
	cin>>n>>m;
	int l=m+1,r=0;
	for(int i=1;i<=m;i++){
		cin>>pur[i];
		if(pur[i]>r) r=pur[i];
		if(pur[i]<l) l=pur[i];
	}
	for(int i=1;i<=n-1;i++){
		cin>>a[i]>>b[i]>>c[i];
		if(b[i]+c[i]<=a[i]){
			r1[i]=b[i],r1sum[i]=r1[i]+r1sum[i-1];
			r2[i]=b[i],r2sum[i]=r2[i]+r2sum[i-1];
			if(i>=l&&i<=r){
				sum1+=c[i];
				sum2+=c[i];	
			}
		}else{
			if(b[i]<a[i]){
				r1[i]=a[i],r1sum[i]=r1[i]+r1sum[i-1];
				r2[i]=b[i],r2sum[i]=r2[i]+r2sum[i-1];
				if(i>=l&&i<=r) sum2+=c[i];			
			}else{
				r1[i]=a[i],r1sum[i]=r1[i]+r1sum[i-1];
				r2[i]=a[i],r2sum[i]=r2[i]+r2sum[i-1];
			}
		}
	}
	
	int cur=pur[1];
	for(int i=2;i<=m;i++){
		int start=min(pur[i],cur);
		int end=max(pur[i],cur);
		sum1+=r1sum[end-1]-r1sum[start-1];
		sum2+=r2sum[end-1]-r2sum[start-1];
		cur=pur[i];
	}
	
	long long ans=min(sum1,sum2);
	
	cout<<ans;
		
	return 0;
 } 
2022/1/8 12:34
加载中...