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 @   Marinaco  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示