建议加强数据
查看原帖
建议加强数据
684254
Rain_chr楼主2023/1/15 15:52

众所周知,离散化+暴力乱搞是没有办法过这道题的,因为他会将中间的可见部分抹去。但是,我在中间随机选了一百个点,也加入离散化,就可以通过了。

显然,还是不能让这种暴力乱搞通过的,所以建议加强数据。

哦对了,如果有人证明这是正解的一种,那就当我没说。

贴代码

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int start,end;
}bill[1010];
map<int,int> num;
bool wall[100010];
int main()
{
	srand(time(0));
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
		scanf("%d%d",&bill[i].start,&bill[i].end);
	for(int i=1;i<=m;i++)
	{
		num[bill[i].start]=0;
		for(int j=1;j<100;j++)
			num[rand()%(bill[i].end-bill[i].start+1)+bill[i].start]=0;
		num[bill[i].end]=0;
	}
	int cnt=0;
	map<int,int>::iterator it;
	it=num.begin();
	while(it!=num.end())
	{
		it->second=++cnt;
		it++;
	}
	for(int i=1;i<=m;i++)
	{
		bill[i].start=num[bill[i].start];
		bill[i].end=num[bill[i].end];
	}
	int ans=0;
	for(int i=m;i;i--)
	{
		bool flag=0;
		for(int j=bill[i].start;j<=bill[i].end;j++)
		{
			flag|=!wall[j];
			wall[j]=1;
		}
		ans+=flag;
	}
	cout<<ans;
	return 0;
}
2023/1/15 15:52
加载中...