F. New Year's Puzzle- Codeforces Round #693 (Div. 3)

F. New Year's Puzzle

https://codeforces.com/contest/1472/problem/F

题解

给出一个2×n的方格,其中有些方格无法填充,问你是否存在一种方案:使用1×2或者2×1的小方格将空白部分全部填充。
首先将所有堵塞位置按y从小排序,使用两个变量(up、down)记录上一个堵塞位置在第一行和第二行的相应位置。
对于第i的堵塞位置,判断距离up和down的长度(uplen,downlen),

  • 如果当前位置一列都被堵塞,则只有当uplen=downlen时才可以将中间位置填充,同时将up和down更新为当前位置,否则无法满足要求。
  • 当第一行被堵塞时,如果uplen=downlen,则此位置和上一个堵塞位置的中间位置可以一列一列填充,此时更新up=当前位置,down为当前位置的前一个位置(因为此时第二行可以填充,就相当于上一个位置被堵塞),否则只有在uplen为偶数时才可以满足题意,此时downlen为奇数,则当前位置的下面被填充,故更新up和down都为当前位置。
  • 当第二行被堵塞时同理。

Code

#include<bits/stdc++.h>
#define IO  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std; 
 
const int inf=0x3f3f3f3f;
typedef long long ll; 
const int N= 2e5+7;
const ll mod=998244353;       

map<ll,int>mp;
struct $
{
int x,y;
bool operator <($ p)const{
	if(y!=p.y)return y<p.y;
	else return x<p.x;
}	
}a[N];
int main(){ 
    IO;
    int t=1;
    cin>>t;
    while(t--){  
    	int n,m;
    	cin>>n>>m;
    	for (int i = 0; i < m; ++i)
    	{
    		cin>>a[i].x>>a[i].y;
    	}
    	sort(a,a+m);
    	a[m].y=0;
    	int up=0,down=0,flag=1;
    	for (int i = 0; i < m; ++i)
    	{
    		int ud=a[i].y-up-1,dd=a[i].y-down-1;
    		if(a[i].y==a[i+1].y){
    			if(ud==dd)up=down=a[i].y;
    			else {
    				flag=0;break;
    			}i++;
    		}
    		else if(a[i].x==1){
    			if(ud==dd)up=a[i].y,down=a[i].y-1;
    			else if(ud%2==0)up=down=a[i].y;
    			else {
    				flag=0;break;
    			}
    		}
    		else if(a[i].x==2){
    			if(ud==dd)up=a[i].y-1,down=a[i].y;
    			else if(dd%2==0)up=down=a[i].y;
    			else{
    				flag=0;break;
    			}
    		}
    	}
    	if(up!=down)flag=0;
    	if(flag)cout<<"YES"<<endl;
    	else cout<<"NO"<<endl;

    }
    return 0;
}
posted @   !^^!  阅读(59)  评论(0)    收藏  举报
编辑推荐:
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· 通过一个DEMO理解MCP(模型上下文协议)的生命周期
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
阅读排行:
· AI浏览器自动化实战
· Chat to MySQL 最佳实践:MCP Server 服务调用
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
· .NET周刊【3月第5期 2025-03-30】
· 重生之我是操作系统(八)----文件管理(上)
点击右上角即可分享
微信分享提示