MnZn求助关于换个写法WA
  • 板块CF939F Cutlet
  • 楼主蒟酱厂妹
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/4/18 23:05
  • 上次更新2023/10/28 03:20:52
查看原帖
MnZn求助关于换个写法WA
310818
蒟酱厂妹楼主2022/4/18 23:05
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<deque>
using std::cin;using std::cout;
constexpr int kN=2e5+7,inf=0x3f3f3f3f;
int f[2][kN];
std::deque<int>q;
inline void chkmin(auto &x,const auto &y){if(x<y)x=y;}
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
//	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	int n,k,p=0;cin>>n>>k;
	memset(f[p],0x3f,sizeof f[p]);f[0][0]=0;
	while(k--){
		int l,r;cin>>l>>r;
		p=!p;memcpy(f[p],f[!p],sizeof f[p]);
		while(!q.empty())q.pop_front();
		for(int i=r;i>=0;i--){
			while(!q.empty()&&q.front()<l-i)q.pop_front();
			while(!q.empty()&&f[!p][r-i]<f[!p][q.back()])q.pop_back();
			q.emplace_back(r-i);
			f[p][i]=std::min(f[p][i],f[!p][q.front()]+1);
			// chkmin(f[p][i],f[!p][q.front()]+1);
		}
		while(!q.empty())q.pop_front();
		for(int i=0;i<=std::min(r,n);i++){
			while(!q.empty()&&q.front()<i-r+l)q.pop_front();
			while(!q.empty()&&f[!p][i]<f[!p][q.back()])q.pop_back();
			q.emplace_back(i);
			f[p][i]=std::min(f[p][i],f[!p][q.front()]+2);
			// chkmin(f[p][i],f[!p][q.front()]+2);
		}
	}
	if(f[p][n]==inf)cout<<"Hungry";
	else cout<<"Full\n"<<f[p][n];
	return 0;
}

写注释上面一行是 AC,写注释掉的是阳历都过不去,这是怎么回事QAQ

2022/4/18 23:05
加载中...