题解 CF980B
前言:
关于原题目中的 “旅馆” 这一用词,个人感觉用起来十分不畅,于是下文中将会用 “障碍物” 一词来代指旅馆。
题目大意:
有一座 \(4 \times n\) 的矩阵,然后让你放置障碍物(其中,障碍物不能放置到矩阵的边缘,换句话说,障碍物只能放到位于中央的 \(2 \times (n-1)\) 这一子矩阵中),使其保证从左上到右下的最短路径条数和从左下到右上的最短路径条数一致.
问能否构造出相应的矩阵,如果能,输出“YES”并输出构造出来的矩阵,否则输出“NO”。
题目保证 \(\boldsymbol{n}\) 为奇数。
题目分析:
这道题显然有很多种做法,我这里来讲一讲我的做法,我的做法是:我们只需要保证障碍物在矩阵中保持对称,就能保证其最短路径条数一致。
理由是显然的(但我不会证),因为此时能保持对称的矩阵一共就如下几种:
- 障碍物都在一行且左右对称分布。
- 障碍物在两行上且上下对称分布。
- 障碍物在两行上且左右对称分布(保证第一行填满了)。
- 障碍物在两行上且左右对称分布(不保证第一行填满)
其中,第 \(2,3,4\) 种是显然的,因为都相当于堵住了在同样的位置被障碍物堵死了。
至于第一种,不会证,但是浅浅的跑了一下从 \(3 \sim 99\) 的程序来验证了一下,发现确实没啥问题,所以可以放心大胆的用这一条性质。
综上,我们的做题思路是:
- 若 \(k\) 为偶数,则可以构造第 \(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的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- Django: Invalid block tag on line 5: 'static', expected 'endblock'. Did you forget to register or load this tag?
错误释义:在第5行中无效的块标签:'static',期望的'endblock'.你忘记登记或装载这个标签了吗? 错误原因:没有引入static文件 {% extends 'base.html' %} ...
- 番外1.ssh连接管理器
目录 本篇前瞻 项目背景 ssh连接管理器 优点 使用方式 配置 使用方法 快速开始 注意点 使用样例 本篇后记 本篇前瞻 学习完go语言基础的专栏,我们究竟写出怎么样的实用工具呢?我在github上 ...
- 轻松玩转70亿参数大模型!借助Walrus在AWS上部署Llama2
Llama 2 是 Meta 的下一代开源大语言模型.它是一系列经过预训练和微调的模型,参数范围从 70 亿到 700 亿个.Meta Llama 2 可免费用于研究和商业用途并且提供了一系列具有不同 ...
- GaussDB技术解读系列:高安全之密态等值
本文分享自华为云社区< DTCC 2023专家解读 | GaussDB技术解读系列:高安全之密态等值>,作者:GaussDB 数据库. 近日,在第14届中国数据库技术大会(DTCC2023 ...
- 基于bert-base-chinese训练bert模型(最后附上整体代码)
目录: 一.bert-base-chinese模型下载 二.数据集的介绍 三.完成类的代码 四.写训练方法 五.总源码及源码参考出处 一.bert-base-chinese模型下载 对于已经预训练好的 ...
- 解决SVN死锁问题
svn执行clean up后出现提示:svn cleanup failed–previous operation has not finished; run cleanup if it was int ...
- Nomad 系列-Nomad 挂载存储卷
系列文章 Nomad 系列文章 概述 显然,如果 Nomad 要运行有状态存储,那么挂载存储卷就是必备功能. Nomad 允许用户通过多种方式将持久数据从本地或远程存储卷装载到任务环境中: 容器存储接 ...
- SQL注入简介
SQL注入(SQL Injection)是一种计算机安全漏洞,它允许攻击者通过操纵应用程序的输入来执行恶意的SQL查询,从而访问.修改或删除数据库中的数据.这种攻击通常发生在应用程序未正确验证.过滤或 ...
- java循环自动生成简单图片
import java.awt.*; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import ...
- IOS苹果应用IPA重签名软件手机版(苹果重签名,企业签名,安卓苹果平台,时间控制)
软件简介 IOS苹果应用IPA重签名软件手机版,可以在安卓或者苹果手机上,苹果应用IPA文件重新签名,无需MAC苹果电脑和配置XCODE开发环境,便可以直接对IPA文件进行签名,签名在本地进行,不消耗 ...