前言:

关于原题目中的 “旅馆” 这一用词,个人感觉用起来十分不畅,于是下文中将会用 “障碍物” 一词来代指旅馆。

题目大意:

有一座 \(4 \times n\) 的矩阵,然后让你放置障碍物(其中,障碍物不能放置到矩阵的边缘,换句话说,障碍物只能放到位于中央的 \(2 \times (n-1)\) 这一子矩阵中),使其保证从左上到右下的最短路径条数和从左下到右上的最短路径条数一致.

问能否构造出相应的矩阵,如果能,输出“YES”并输出构造出来的矩阵,否则输出“NO”。

题目保证 \(\boldsymbol{n}\) 为奇数

题目分析:

这道题显然有很多种做法,我这里来讲一讲我的做法,我的做法是:我们只需要保证障碍物在矩阵中保持对称,就能保证其最短路径条数一致。

理由是显然的(但我不会证),因为此时能保持对称的矩阵一共就如下几种:

  1. 障碍物都在一行且左右对称分布。
  2. 障碍物在两行上且上下对称分布。
  3. 障碍物在两行上且左右对称分布(保证第一行填满了)。
  4. 障碍物在两行上且左右对称分布(不保证第一行填满)

其中,第 \(2,3,4\) 种是显然的,因为都相当于堵住了在同样的位置被障碍物堵死了。

至于第一种,不会证,但是浅浅的跑了一下从 \(3 \sim 99\) 的程序来验证了一下,发现确实没啥问题,所以可以放心大胆的用这一条性质。

综上,我们的做题思路是:

  1. 若 \(k\) 为偶数,则可以构造第 \(2\) 类矩阵。
  2. 若 \(k\) 为奇数,则先尝试构造第 \(1\) 类矩阵,若第一行被填满后还有剩余,则在尝试构造第 \(3\) 类矩阵。

代码实现:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define TIME_LIMIT (time_t)1e3
#define dbg(x) cerr<<#x<<": "<<x<<endl;
bool block[100][100];
signed main() {
ios::sync_with_stdio(false);
#ifdef LOCAL
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
time_t cs = clock();
#endif
//========================================
int n,k;
cin>>n>>k;
cout<<"YES"<<endl;
if(!(k&1)){
for(int i=2;i<=1+k/2;i++){
block[2][i] = 1;
block[3][i] = 1;
}
}
else{
int row = 2;
while(k>(n-2)){
for(int i=2;i<=n-1;i++)
block[row][i] = 1;
k-=n-2;
row++;
}
int space = n-2-k;
for(int i=2;i<=1+k/2;i++)
block[row][i] = 1;
if(k&1){
int center = n/2+1;
block[row][center] = 1;
}
for(int i=2+k/2+space+(k&1);i<=n-1;i++)
block[row][i] = 1;
}
for(int i=1;i<=4;i++){
for(int j=1;j<=n;j++){
if(block[i][j])
cout<<'#';
else
cout<<'.';
}
cout<<'\n';
}
cout<<endl;
//========================================
#ifdef LOCAL
fclose(stdin);
fclose(stdout);
time_t ce = clock();
cerr<< "Used Time: " << ce-cs << " ms."<<endl;
if(TIME_LIMIT<ce-cs)
cerr<< "Warning!! Time exceeded limit!!"<<endl;
#endif
return 0;
}

题解 CF980B的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. javascript中一些难以理解的专有名词 2(也不是很专有)

    作用域链 让人迷惑的例子 function foo() {console.log(v)} function foo1() { var v = "v1" foo() console. ...

  2. 深入Scikit-learn:掌握Python最强大的机器学习库

    本篇博客详细介绍了Python机器学习库Scikit-learn的使用方法和主要特性.内容涵盖了如何安装和配置Scikit-learn,Scikit-learn的主要特性,如何进行数据预处理,如何使用 ...

  3. 升讯威在线客服系统是如何实现对 IE8 完全完美支持的(怎样从 WebSocket 降级到 Http)【干货】

    简介 升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放.开源.共享.努力打造 .net 社区的一款优秀开源产品. 完整私有化包下载地址 https ...

  4. WebSSH之录屏安全审计(三)

    第一篇:Gin+Xterm.js实现WebSSH远程Kubernetes Pod(一) 第二篇:WebSSH远程管理Linux服务器.Web终端窗口自适应(二) 支持用户名密码认证 支持SSH密钥认证 ...

  5. 开源.NetCore通用工具库Xmtool使用连载 - XML操作篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库. XML操作是软件开发过程中经常会遇到的情况:包括XML内容的遍历解 ...

  6. virtualbox克隆虚拟机

    1.选择要克隆的虚拟机 2.设置克隆机的名称和存放位置 3.选择克隆类型 4.克隆结果

  7. [超详细]SpringBoot整合WebSocket

    1. 什么是WebSocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的.双向的通信.相对于传统的基于请求和响应的 HTTP 协议, ...

  8. 《Kali渗透基础》11. 无线渗透(一)

    @ 目录 1:无线技术 2:IEEE 802.11 标准 2.1:无线网络分层 2.2:IEEE 2.3:日常使用标准 2.3.1:802.11 2.3.2:802.11b 2.3.3:802.11a ...

  9. 快手根据关键词取商品列表 API 返回值说明

    item_search-根据关键词取商品列表 注册开通 ks.item_search 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secr ...

  10. MIPS寄存器堆

    实验目的 熟悉并掌握 MIPS 计算机中寄存器堆的原理和设计方法 理解源操作数/目的操作数的概念 实验环境 Vivado 集成开发环境 MIPS寄存器 寄存器R0的值恒为0. 模块接口设计 1个写端口 ...