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;
}

浙公网安备 33010602011771号