D - Diagonal Separation(思维/排序)

题目链接:https://atcoder.jp/contests/abc386/tasks/abc386_d

题意:

给你一个表格,表格上已经填充了一些黑块和白块,让你判断能否涂色至黑块总是在白块的左上角

思路:

每个点离散化,按行为第一关键字,列为第二关键字排序。即从上至下找到白块便记录其最小的y,后来的黑块在这个白块后面或者下面(因为白块和黑块都经过排序),判断后来的黑块y是不是大于或等于此时白块最小的y

#include<bits/stdc++.h>
using namespace std;
const int maxn =2e5+5;
struct point{
	int x,y;
	char c;
}a[maxn];
int n;
int m;
bool cmp(point a,point b)
{
	if(a.x!=b.x)return a.x<b.x;
	return a.y<b.y;
}
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		cin>>a[i].x>>a[i].y>>a[i].c;
	}
	sort(a,a+m,cmp);
	int wy=n+1;
	bool f=true;
	for(int i=0;i<m;i++)
	{
		if(a[i].c=='W')wy=min(wy,a[i].y);
		else
		{
			if(a[i].y>=wy)
			{
				f=false;
			}
		}
	}
	if(f)cout<<"Yes";
	else cout<<"No";
	return 0;
}


posted @ 2025-01-01 15:46  Marinaco  阅读(25)  评论(0)    收藏  举报
//雪花飘落效果