题意

https://vjudge.net/problem/CodeForces-1236D

最近,爱丽丝得到了一个新玩偶。它甚至可以走路!

爱丽丝为玩偶建造了一个迷宫,并想对其进行测试。迷宫具有n行和m列。有k个障碍物,第i个障碍物位于单元格(xi,yi​)上,这意味着第xi​个行与第yi​列相交的单元格上存在一个禁止通过的障碍物。

然而,玩偶有着缺陷。在同一单元格(包括起始单元格)中,它最多只能笔直走或右转一次。它无法进入有障碍物的单元格或走出迷宫的界限之外。

现在,爱丽丝正在控制娃娃的动作。她将玩偶放入单元格(1,1)(即迷宫的左上角)中。最初,玩偶的朝向从(1,1)向着(1,m)。她想让玩偶恰好穿过一次所有单元格而没有障碍,玩偶的行动可以在任何地方结束。爱丽丝的想法可以实现吗?

思路

这题细节非常多,但是也很好写,直接模拟就行了。但是一步一步的走肯定会T,我们可以维护每一行、每一列的障碍物,上下左右边界,每次走的时候直接跳到最近的障碍物前面即可。

注意几个坑:

1.(1,1)正前方(1,2)有障碍物,可以直接右转,这里要特判一下。

2.每跳一次,判断前面那个位置是否是不可行的点,这里我用上述的上下左右边界判断,如果是,那么走不通了,break即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
vector<ll> g[N],gg[N];
int main()
{
std::ios::sync_with_stdio(false);
ll n,m,k;
cin>>n>>m>>k;
int bb=0;
for(int i=1; i<=k; i++)
{
ll x,y;
cin>>x>>y;
g[x].push_back(y);
gg[y].push_back(x);
}
ll l=1,r=m,u=1,d=n;
ll x=1,y=1,sum=1;
if(k==0)
{
cout<<"Yes"<<endl;
return 0;
}
int sz=g[x].size(),flag=0;
if(sz==m-1)
flag=1;
ll t;//最近的符合要求的位置+1
while(1)
{
if(!flag)
{
sz=g[x].size();
t=r+1;
for(int i=0; i<sz; i++)
{
if(g[x][i]>y)
t=min(t,g[x][i]);
}
if(t-y==1)
break;
sum+=t-y-1,y=t-1,r=t-1-1,u=x+1;
}
// cout<<x<<" "<<y<<" "<<sum<<endl;
// cout<<l<<" "<<r<<" "<<u<<" "<<d<<endl;
sz=gg[y].size();
t=d+1;
for(int i=0; i<sz; i++)
{
if(gg[y][i]>x)
{
t=min(t,gg[y][i]);
}
}
if(t-x==1)
break;
sum+=t-x-1,x=t-1,d=t-1-1;
// cout<<x<<" "<<y<<" "<<sum<<endl;
// cout<<l<<" "<<r<<" "<<u<<" "<<d<<endl;
sz=g[x].size();
t=l-1;
for(int i=0; i<sz; i++)
{
if(g[x][i]<y)
{
t=max(t,g[x][i]);
}
}
if(y-t==1)
break;
sum+=y-t-1,y=t+1,l=t+1+1;
// cout<<x<<" "<<y<<" "<<sum<<endl;
// cout<<l<<" "<<r<<" "<<u<<" "<<d<<endl;
sz=gg[y].size();
t=u-1;
for(int i=0; i<sz; i++)
{
if(gg[y][i]<x)
{
t=max(t,gg[y][i]);
}
}
if(x-t==1)
break;
sum+=x-t-1,x=t+1,u=t+1+1;
// cout<<x<<" "<<y<<" "<<sum<<endl;
// cout<<l<<" "<<r<<" "<<u<<" "<<d<<endl;
}
// cout<<sum<<endl;
if(sum+k==n*m)
{
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
return 0;
}
/*
2 2 2
1 2
2 2
*/

  

CodeForces 1236D(模拟)的更多相关文章

  1. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  2. CodeForces - 404B(模拟题)

    Marathon Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  3. Codeforces 709B 模拟

    B. Checkpoints time limit per test:1 second memory limit per test:256 megabytes input:standard input ...

  4. CodeForces - 404A(模拟题)

    Valera and X Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit ...

  5. Codeforces 390A( 模拟题)

    Inna and Alarm Clock Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64 ...

  6. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

  7. CodeForces - 796B 模拟

    思路:模拟移动即可,如果球落入洞中停止移动.注意:有可能第一个位置就是洞!! AC代码 #include <cstdio> #include <cmath> #include ...

  8. CodeForces - 864C-Bus-(模拟加油站问题)

    https://vjudge.net/problem/CodeForces-864C 题意:两地之间有个加油站,往返走k个单程,最少加油多少次. 大佬几十行代码就解决,我却要用一百多行的if语句模拟解 ...

  9. Codeforces 709C 模拟

    C. Letters Cyclic Shift time limit per test:1 second memory limit per test:256 megabytes input:stand ...

随机推荐

  1. PC/SC双界面读写器开发指南

    友我科技PCSC双界面读写器YW-606开发指南 1.建立资源管理器的上下文 函数ScardEstablishContext()用于建立将在其中进行设备数据库操作的资源管理器上下文(范围). 函数原型 ...

  2. 个人项目开源之Django文件中转站源代码

    可以当做文件中转站或网盘 源代码

  3. 20180918 begin

    20180918-20190717 风 雅 颂(305,每天一首): 诗经鉴赏, 180918-1030 魔鬼经济学 <唐宋词十七讲>叶嘉莹<最美的宋词> 布谷鸟<诗境浅 ...

  4. C#&.Net干货分享-构建后台自动定时任务的源码

    1.创建一个自动处理中心任务参数的类,直接源码: namespace Frame.AutoProcess{    /// <summary>    /// 委托(用于异步处理任务)    ...

  5. [日常] 解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0

    解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0 原因:是PHP有两种方式添加扩展模块,一种是直接编译进了PHP,另 ...

  6. 『003』Shell命令

    『001』索引-Linux Shell Command shell命令 <01>[线上查询及帮助][001]-[001] [001]- 点我快速打开文章[man][help][已改版] & ...

  7. CentOS安装docker-compose

    一.compose简介 compose是一个定义和运行多容器的docker应用的工具.compose 通过yaml文件配置应用服务,然后仅需一个命令就可以创建和运行所有配置中的服务. 二.compos ...

  8. 从公司实际沟通中-得知bug的描述与为什么要bug留痕

    从公司实际沟通中-得知bug的描述与为什么要bug留痕 最近在做的一个实际项目.下图为我们的聊天记录,仔细看图,领悟: 从中预期可以学习到的: 1)实际公司--Bug描述的另一个方法: 2)实际公司- ...

  9. vmware workstations 虚拟机安装CentOS

    1.下载vmware ,我的版本是从上学时保存网盘的,版本比较低,链接如下: 链接:https://pan.baidu.com/s/19QP0q8xmPWIPn-rziPTvKg 提取码:lvh9 2 ...

  10. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest 二分 前缀和

    E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...