全wa求助
查看原帖
全wa求助
483252
罗小菜楼主2023/9/14 22:03

一个很奇怪的模拟写法,不知道哪里细节没有处理好,有没有大佬看一下的

#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=1e5+10;
struct node
{
	int t,w;
}ticket[MAXN];
int head,tail;
int nxt[MAXN],lst[MAXN];
int n;
int ans;
inline void Add(int x)
{
	if(tail==0)
	{
		head=x;
		tail=x;
		lst[x]=0;
		nxt[x]=0;
		return ;
	}
	lst[x]=tail;
	nxt[tail]=x;
	nxt[x]=0;
	tail=x;
	return ;
}
inline void Delete(int x)
{
	if(x==head)
	{
		head=nxt[x];
		lst[nxt[x]]=0;
		return ;
	}
	if(x==tail)
	{
		tail=lst[x];
		nxt[lst[x]]=0;
		return ;
	}
	nxt[lst[x]]=nxt[x];
	lst[nxt[x]]=lst[x];
	return ;
}
inline bool check(int w)
{
	int now=head;
	while(now)
	{
		if(ticket[now].w>=w)
		{
			Delete(now);
			return true;
		}
		now=nxt[now];
	}
	return false;
}
inline void check_t(int t)
{
	int now=head;
	while(now)
	{
		if(t-ticket[now].t>45) Delete(now);
		now=nxt[now];
	}
	return ;
}
inline void print()
{
	int now=head;
	while(now)
	{
		cout<<now<<" ";
		now=nxt[now];
	}
	cout<<"\n";
	return ;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
//		cout<<i<<" "<<ans<<"\n";
//		print();
		int opt,w,t;
		cin>>opt>>w>>t;
		check_t(t);
		if(opt==0)
		{
			ans+=w;
			ticket[i].t=t;
			ticket[i].w=w;
			Add(i);
		}
		else
		{
			if(check(w)) continue;
			ans+=w;
		}
	}
	cout<<ans;
	return 0;
}
2023/9/14 22:03
加载中...