[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. promise链式调用

    var that = this;that.hello().then(res => { return that.world(res);}).then(res => { console.log ...

  2. python3的bytes数据类型

    python已升级到了3.0,都说现在是属于python3,未来也是属于python3,那python3到底改了些什么呢? 其中我记得非常清楚的是,python3对文本和二进制数据作了更为清晰的区分. ...

  3. ArcGIS JavaScript API with jQuery: Error: multipleDefine

    I would like to use ArcGIS JavaScript API 4.3 with jQuery, but I am getting following errors.  I sea ...

  4. Ubuntu中FTP安装配置及基本概念(原创)

    注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/ftp-inst ...

  5. 11maven的聚合

    我们都知道项目之间的依赖首先要把被依赖的项目先安装install到maven的本地仓库中,然后在本项目中配置被依赖的仓库坐标,才能进行依赖通信. 例如: A项目 >  B项目 A项目依赖B项目中 ...

  6. JavaSE学习笔记(4)---抽象类和接口

    JavaSE学习笔记(4)---抽象类和接口 抽象方法和抽象类 ·抽象方法 使用abstract修饰的方法,没有方法体,只有声明.定义的是一种"规范",就是告诉子类必须要给抽象方法 ...

  7. BIOS和DOS中断大全

    DOS中断: 1.字符功能调用类(Character-Oriented Function)01H.07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的 ...

  8. 高数(求x的n次方的导数)

  9. Nessus 8.2.3无IP限制VM版虚拟机

    根据“西门吹雪”http://ximcx.cn/m/?post=151的文章自己下载配置的过程 VM版本>=12都行,我用的是VM14 下载地址 https://moehu-my.sharepo ...

  10. java连接Sqlserver数据库问题总结

    网上说的要在:Sqlserver配置管理器中设置SQL Server网络配置->SQLEXPRESS的协议->TCP/IP的方法试了没啥用 不知道是不是自己测试设置的时候改了啥参数给整好了 ...