[CF1236D] Alice and the Doll

Description

\(N \times M\)网格,有 \(K\) 个格子里有障碍物。每次经过一个格子的时候只能直走或者右转一次。初态在 \((1,1)\) 格子向上。求是否存在一条路径经过所有无障碍格子恰好一次。

Solution

最优的走法是遇到障碍或者边界就右转,否则直走。

走过一排格子相当于挪动边界线。

这两个结论仔细品味起来很挺有深度的。

然后暴力模拟就可以了,找障碍物的过程可以用 set 优化。

这题的坐标系好像有点奇怪,SB的我就这么搞反坐标WA了一发。然后忘记开longlong又WA了一发。

Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 100005; int n,m,k,t1,t2,t3,t4,lx,ly,ux,uy,dir,ans=1;
set <int> sx[N],sy[N]; int FindIncX(int x,int y)
{
return min(ux,*sy[y].lower_bound(x));
} int FindDecX(int x,int y)
{
return max(lx,*(--sy[y].lower_bound(x)));
} int FindIncY(int x,int y)
{
return min(uy,*sx[x].lower_bound(y));
} int FindDecY(int x,int y)
{
return max(ly,*(--sx[x].lower_bound(y)));
} signed main()
{
cin>>n>>m>>k;
lx=0;
ly=0;
ux=n+1;
uy=m+1;
for(int i=1; i<=m; i++)
{
sy[i].insert(0);
sy[i].insert(n+1);
}
for(int i=1; i<=n; i++)
{
sx[i].insert(0);
sx[i].insert(m+1);
}
for(int i=1; i<=k; i++)
{
cin>>t1>>t2;
sx[t1].insert(t2);
sy[t2].insert(t1);
}
dir=0;
int x=1,y=1;
while(true)
{
int nx,ny;
switch(dir)
{
case 0:
nx=x;
ny=FindIncY(x,y)-1;
break;
case 1:
ny=y;
nx=FindIncX(x,y)-1;
break;
case 2:
nx=x;
ny=FindDecY(x,y)+1;
break;
case 3:
ny=y;
nx=FindDecX(x,y)+1;
break;
}
if(x==nx && y==ny)
{
dir=(dir+1)%4;
switch(dir)
{
case 0:
nx=x;
ny=FindIncY(x,y)-1;
break;
case 1:
ny=y;
nx=FindIncX(x,y)-1;
break;
case 2:
nx=x;
ny=FindDecY(x,y)+1;
break;
case 3:
ny=y;
nx=FindDecX(x,y)+1;
break;
}
if(x==nx && y==ny)
break;
}
ans += abs(nx-x) + abs(ny-y);
switch(dir)
{
case 0:
lx=max(lx,nx);
break;
case 1:
uy=min(uy,ny);
break;
case 2:
ux=min(ux,nx);
break;
case 3:
ly=max(ly,ny);
break;
}
x=nx;
y=ny;
}
//cout<<ans<<endl;
if(ans==n*m-k)
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}

[CF1236D] Alice and the Doll - 模拟,STL的更多相关文章

  1. CSP 201612-3 权限查询 【模拟+STL】

    201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权 ...

  2. 【CF1236D】Alice and the Doll(set)

    题意:给定一个n*m的网格,其中k格有障碍 周驿东从(1,1)出发面朝右,每次行动前他可以选择顺时针旋转90度或不旋转,然后向自己朝向的位置走1格 问他能否不重复不遗漏的走过所有非障碍格 n,m,k& ...

  3. CodeForces 705C Thor (模拟+STL)

    题意:给定三个操作,1,是x应用产生一个通知,2,是把所有x的通知读完,3,是把前x个通知读完,问你每次操作后未读的通知. 析:这个题数据有点大,但可以用STL中的队列和set来模拟这个过程用q来标记 ...

  4. 2018.08.28 集合堆栈机(模拟+STL)

    描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...

  5. 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配

    题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...

  6. 用数组模拟STL中的srack(栈)和queue(队列)

    我们在理解stack和queue的基础上可以用数组来代替这两个容器,因为STL中的stack和queue有可能会导致程序运行起来非常的慢,爆TLE,所以我们使用数组来模拟他们,不仅可以更快,还可以让代 ...

  7. Codeforces Round #285 (Div. 2) A B C 模拟 stl 拓扑排序

    A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  8. hdoj 1702 ACboy needs your help again!【数组模拟+STL实现】

    ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. UVA 246 - 10-20-30 (模拟+STL)

    UVA 246 - 10-20-30 题目链接 题意:给52张的扑克堆,先从左往右发7张牌,之后连续不断从左往右发7张牌,假设有牌堆形成了下面3种情况(按顺序推断): 1.头两张+尾一张和为10或20 ...

随机推荐

  1. 图片中添加箭头【使用PPT实现】

    手头上可以使用的方案 QQ截图 分辨率会改变 画图 网上的教程一般是画一根线再加一个三角来画箭头,有点麻烦,改起来不好改. PS 对我来说,软件安装本身就是个问题, 插入图片,加入箭头,组合,另存为, ...

  2. sqlserver数据库重启

    停止:net stop mssqlserver 重启:net start mssqlserver

  3. 判定PDF文件是否能够正常打开

    下载iTextSharp.dll using iTextSharp.text.pdf; PdfReader reader = new PdfReader(strPath + "\\" ...

  4. Android布局样式

    本篇介绍一下Android中的几种常用的布局,主要介绍内容有: ·View视图 ·LinearLayout ·RelativeLayout 在介绍布局之前,我们首先要了解视图View的基本属性,因为所 ...

  5. Jackson使用指南

    Jackson常用注解 序列化注解 @JsonAnyGetter 像普通属性一样序列化Map public class ExtendableBean { public String name; pri ...

  6. sqlmap注入基本教程

    附上一个别人总结的:https://www.cnblogs.com/ichunqiu/p/5805108.html 一套基础的sqlmap语句: python sqlmap.py -u "h ...

  7. KiKi's K-Number HDU - 2852 树状数组+二分

    #include<iostream> #include<cstring> using namespace std; ; int tr[N]; int lowbit(int x) ...

  8. 专访|高思教育创始人须佶成(上)【UncleW】

    大家好,我是校长运营圈专栏作者UncleW. 2017年9月,高思教育发布董事会公告,宣布完成5.5亿元人民币融资.成立于2009年的高思教育到今天刚刚8岁,员工人数已突破2000人,2017年共有5 ...

  9. pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试

    接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...

  10. Django内置的中间件

    内置中间件 1. django.middleware.gzip.GZipMiddleware:相应数据进行压缩.如果内容长度少于200个长度,那么就不会压缩. 在settings.py文件中配置MID ...