求助,这两个代码有何区别
  • 板块P2034 选择数字
  • 楼主wmx111
  • 当前回复8
  • 已保存回复9
  • 发布时间2024/8/5 16:41
  • 上次更新2024/8/5 17:32:41
查看原帖
求助,这两个代码有何区别
877768
wmx111楼主2024/8/5 16:41

rt WA代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int s[N],f[N],n,m,q[N],tail,head;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]+=s[i-1];
	}
	for(int i=1;i<=n;i++){
		while(tail>=head&&(f[i-1]-s[i]>=f[q[tail]-1]-s[q[tail]]))tail--;
		q[++tail]=i;
		while(tail>=head&&q[head]<i-m)head++;
		int j=q[head];
		f[i]=f[j-1]-s[j]+s[i];
	}
	cout<<f[n];
	return 0;
}

AC代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int f[N],s[N],q[N],tail,head,n,m;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]+=s[i-1];
	}
	for(int i=1;i<=n;i++){
		while(tail>=head&&f[i-1]-s[i]>=f[q[tail]-1]-s[q[tail]])tail--;
		q[++tail]=i;
		while(tail>=head&&q[head]<i-m) head++;
		int j=q[head];
		f[i]=f[j-1]-s[j]+s[i]; 
	}
	cout<<f[n];
	return 0;
}

这两个代码有什么区别吗

2024/8/5 16:41
加载中...