又wa了,但没完全wa
查看原帖
又wa了,但没完全wa
1065103
Atri_Lobato楼主2024/5/7 20:50
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int h[5000005];
int p[5000005];
bool point[5000005];
queue<int> q;
struct line
{
	int left,right;
}a[5000005];
bool cmp(line x,line y)
{
	return x.left<y.left;
}
bool ed[5000005];
int main()
{
	int n,m,t,ans=0;
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++)
	scanf("%d",&h[i]);
	for(int i=1;i<=m;i++)
	scanf("%d",&p[i]);
	sort(p+1,p+1+m);
	
	for(int i=1,last=0,safety=999999999;i<=m;i++)
	{
		int q,time;
		if(safety<=last&&safety>=p[i])
		{
			ed[i]=1;
		}
		if(last<p[i])
		{
			q=p[i];
			time=0;
		}
		else
		{
			q=last;
			time=last-p[i];
		}
		for(;time<h[q]&&q<=n;time++,q++)
		{
			if(h[q]>t)
			{
				ed[i]=1;
				safety=q;
			}
		}
		q--;
		last=q;
		a[i].right=q;
	}
	
	for(int i=m,last=999999999,safety=0;i>=1;i--)
	{
		int q,time;
		if(safety>=last&&safety<=p[i])
		{
			ed[i]=1;
		}
		if(last>p[i])
		{
			q=p[i];
			time=0;
		}
		else
		{
			q=last;
			time=p[i]-last;
		}
		for(;time<h[q]&&q>=1;time++,q--)
		{
			if(h[q]>t)
			{
				ed[i]=1;
				safety=q;
			}
		}
		q++;
		last=q;
		a[i].left=q;
	}
	sort(a+1,a+1+m,cmp);
	for(int i=1,last=999999999;i<=m;i++)
	{
		if(ed[i])
		{
			continue;
		}
		if(a[i].left<=last&&last<=a[i].right)
		{
			continue;
		}
		ans++;
		last=a[i].right;
	}

	if(ans)
	cout<<ans+1;
	else
	cout<<ans;
	return 0;
}
2024/5/7 20:50
加载中...