[CF1236D] Alice and the Doll - 模拟,STL
[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的更多相关文章
- CSP 201612-3 权限查询 【模拟+STL】
201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权 ...
- 【CF1236D】Alice and the Doll(set)
题意:给定一个n*m的网格,其中k格有障碍 周驿东从(1,1)出发面朝右,每次行动前他可以选择顺时针旋转90度或不旋转,然后向自己朝向的位置走1格 问他能否不重复不遗漏的走过所有非障碍格 n,m,k& ...
- CodeForces 705C Thor (模拟+STL)
题意:给定三个操作,1,是x应用产生一个通知,2,是把所有x的通知读完,3,是把前x个通知读完,问你每次操作后未读的通知. 析:这个题数据有点大,但可以用STL中的队列和set来模拟这个过程用q来标记 ...
- 2018.08.28 集合堆栈机(模拟+STL)
描述 中学数学里集合的元素往往是具体的数字,比如A = {1,2,3},B = {}(空集)等等.但是要特别注意,集合的元素也可以是另一个集合,比如说C = {{}},即说明C有且仅有一个元素--空集 ...
- 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配
题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...
- 用数组模拟STL中的srack(栈)和queue(队列)
我们在理解stack和queue的基础上可以用数组来代替这两个容器,因为STL中的stack和queue有可能会导致程序运行起来非常的慢,爆TLE,所以我们使用数组来模拟他们,不仅可以更快,还可以让代 ...
- 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 ...
- 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 ( ...
- UVA 246 - 10-20-30 (模拟+STL)
UVA 246 - 10-20-30 题目链接 题意:给52张的扑克堆,先从左往右发7张牌,之后连续不断从左往右发7张牌,假设有牌堆形成了下面3种情况(按顺序推断): 1.头两张+尾一张和为10或20 ...
随机推荐
- promise链式调用
var that = this;that.hello().then(res => { return that.world(res);}).then(res => { console.log ...
- python3的bytes数据类型
python已升级到了3.0,都说现在是属于python3,未来也是属于python3,那python3到底改了些什么呢? 其中我记得非常清楚的是,python3对文本和二进制数据作了更为清晰的区分. ...
- 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 ...
- Ubuntu中FTP安装配置及基本概念(原创)
注:本文出自博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/ftp-inst ...
- 11maven的聚合
我们都知道项目之间的依赖首先要把被依赖的项目先安装install到maven的本地仓库中,然后在本项目中配置被依赖的仓库坐标,才能进行依赖通信. 例如: A项目 > B项目 A项目依赖B项目中 ...
- JavaSE学习笔记(4)---抽象类和接口
JavaSE学习笔记(4)---抽象类和接口 抽象方法和抽象类 ·抽象方法 使用abstract修饰的方法,没有方法体,只有声明.定义的是一种"规范",就是告诉子类必须要给抽象方法 ...
- BIOS和DOS中断大全
DOS中断: 1.字符功能调用类(Character-Oriented Function)01H.07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的 ...
- 高数(求x的n次方的导数)
- Nessus 8.2.3无IP限制VM版虚拟机
根据“西门吹雪”http://ximcx.cn/m/?post=151的文章自己下载配置的过程 VM版本>=12都行,我用的是VM14 下载地址 https://moehu-my.sharepo ...
- java连接Sqlserver数据库问题总结
网上说的要在:Sqlserver配置管理器中设置SQL Server网络配置->SQLEXPRESS的协议->TCP/IP的方法试了没啥用 不知道是不是自己测试设置的时候改了啥参数给整好了 ...