关于刚刚结束的XJ模拟赛A题
  • 板块学术版
  • 楼主cmll02
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/11/6 18:47
  • 上次更新2023/11/5 08:47:09
查看原帖
关于刚刚结束的XJ模拟赛A题
171487
cmll02楼主2020/11/6 18:47

RT,我想过前两个Subtask,结果爆炸了。

找不出问题,求助!(我好菜啊)

顺便求正解,Sol看不懂

#include <stdio.h>
inline int read()
{
	int num=0;char c=getchar();
	while(c<48||c>57)c=getchar();
	while(c>=48&&c<=57)num=num*10+(c^48),c=getchar();
	return num;
}
inline int min(int a,int b){return a<b?a:b;}
inline int max(int a,int b){return a>b?a:b;}
int l[2000005],r[2000005];
#include <string.h>
int main()
{
	freopen("myth.in","r",stdin);
	freopen("myth.out","w",stdout);
	int T=read();
	while(T--)
	{
		int n=read();
		/*if(T==25)
		{
			printf("%d\n",n);
			for(int i=0;i<3*n;i++)
			{
				int x=read();
				printf("%d ",x);
				if(i%3==2)puts("");
			}
			continue;
		}*/
		memset(l,-1,sizeof(int)*(n+3));
		memset(r,0x3f,sizeof(int)*(n+3));
		for(int ii=0;ii<n;ii++)
		{
			int x=read(),y=read(),d=read();
			if(d==1)
			{
				for(int i=x;i<=n+1;i++)r[i]=min(y,r[i]);
			}
			else if(d==2)
			{
				for(int i=0;i<=x;i++)r[i]=min(y,r[i]);
			}
			else if(d==3)
			{
				for(int i=0;i<=x;i++)l[i]=max(y,l[i]);
			}
			else
			{
				for(int i=x;i<=n+1;i++)l[i]=max(y,l[i]);
			}
		}
	//	puts("");
		for(int i=0;i<=n+1;i++)
		{
		//	printf("%d: %d %d\n",i,l[i],r[i]);
			if(l[i]+1<r[i])
			{
				puts("No");
				break;
			}
			if(i==n+1)puts("Yes");
		}
	}
	return 0;
}
2020/11/6 18:47
加载中...