【2020.11.14提高组模拟】无尽之前 (game) 题解
【2020.11.14提高组模拟】无尽之前 (game) 题解
有趣的题面
题目背景
雏见泽,一个和平的,或者说本应和平的小村庄,却因连续四年的怪死事件而蒙上了阴 影。
无一例外,每年的事件都发生在棉流祭当晚。一人死亡,一人失踪。是御社神的作祟, 还是另有隐情?人们这样议论着。
六月已至,一年一度的棉流祭之火又将重新燃起。平日里冷清的集市渐渐热闹起来,人 们的欢声笑语环绕着这个宁静的小村庄。而同时,在不知名的角落里,也有些许不安的种子 在无声的发芽。
蓝色长发的少女站在山巅上,冷冷地看着山下即将发生的一切。
“这次,又将是谁呢?”
身后的人影无声地点头。
问题描述
这是开始前的故事。
羽入和小梨花在 \(n ∗ m\) 的棋盘上下棋,其中行从 \(1\) 到 \(n\) 标号,列从 \(1\) 到 \(m\) 标号。
棋盘上有两种棋子:车和兵。车每次可以往四个方向走任意格,直到在某个空地停下或 者碰到一个兵把兵吃掉并停下来。兵每次可以往四个方向走一格,要求格子是空地或者是车, 如果是车则将车吃掉。
现在羽入控制车,梨花控制兵,车初始在 \((x1, y1)\),终点在 \((x2, y2)\),如果车走到了终点 (无论下一步是否存活)则羽入获胜,否则若车被吃了或者羽入在 \(10^{100000}\) 步内无法获胜则梨花获胜。双方每次只能移动自己的某一个棋子走一步(也可以选择不移动)。
棋盘初始只有一个车,梨花在开始前可以选择在任意非车位置(包括终点)放兵,接着羽入先手操作车,之后两人轮流操作。
因为羽入除了会啊呜啊呜以外还很聪明,所以梨花想知道自己需要放的最少兵的数量, 使得两人都按照最优策略进行时自己可以获胜,如果无解输出 \(−1\)。
题意简述
一人控制一个车,一人控制\(x\)个兵。控制车的人先走。给定棋盘大小\(n \times m\)、起点\((sx,sy)\)、终点\((ex,ey)\),问兵能不能阻止车走到终点,不能输出\(-1\),否则最小化\(x\)并输出。
吓人的数据范围
对于\(100\%\)的数据保证起点和终点不相同,\(n,m \le 300\),\(1\le x_1,x_2\le n\),\(1\le y_1,y_2\le m\)
| 数据点编号 | \(n,m\le\) |
|---|---|
| \(1,2,3\) | \(3\) |
| \(4,5,6\) | \(50\) |
| \(7,8,9,10\) | \(300\) |
题目分析
看数据范围和题面中的\(10^{100000}\)会不会以为是个很难的东西?
其实(就是我太菜了),这题是一个模拟+分类讨论的思维题。我们可以从特殊到一般地讨论所有情况。
Subtask1
起点终点只差一步
那么兵无法摆在起点和终点之间,车可以一步到位,输出\(-1\)。

Subtask2
终点到所有边界的距离\(\le1\)。
只可能出现在\(\le3\times3\)的地图上,终点到四周的距离才可能都\(\le1\)。
只要放一个兵在终点,车不能走到兵的四个方向上,因此答案是\(1\)。

Subtask3
长度或宽度\(\le2\)
如果某一维\(=1\)就连放两个兵;
如果\(=2\)的话用两个兵把路堵死。
如果车把其中一个兵吃了,就会被另一个兵吃掉,因此答案是\(2\)。

Subtask3.5
长度或宽度\(=2\)且起点在终点九宫格的斜脚处

因为正常情况下车不可能进入九宫格的。
三个兵放在起点和终点围成的矩形内,答案为3。
只用两个兵的话车可以往后退,同时压住兵不能移动,然后就可以获胜了。

但是还是有特殊情况(特殊情况中的特殊情况了):(默认为\(2\)的是高度)若到左右两边某一边的距离为\(1\),车也是靠着那个角落的,则可以只用横放两个兵,答案为\(2\)。

Subtask4
终点到某个角落的切比雪夫距离\(\le1\)
切比雪夫距离指的是国际象棋中的国王从一个起点到终点需要走的步数。
容易推出,S到T的切比雪夫距离就是\(max(\Delta x,\Delta y)\)。
只要在终点放一个,与终点相连的靠近起点的位置上放一个,车转不过来,因此答案为\(2\)

Subtask4.5
起点和终点是对角线相邻的状态,类似于Subtask3.5。答案为3。

Subtask5
其他的所有情况
放三个在终点、终点的九宫格内

如图,假如白色九宫格中心是终点,那么对车的位置进行分类讨论。
无论车在哪种颜色中,兵都可以在相同或者更少的步数内走到安全的位置(保护中间的兵且如果车吃掉某个兵时会被另一个兵吃了)
Other Subtask
其实还是有一些没有考虑到的情况的。
\(n=m=3\),\(S\)=\((2,2)\),\(T\)在角落
答案为2,在两个对角各放一个。
......
也许还会有很多别的情况,以后想到再说吧。只有10个测试点没办法涵盖到所有情况的。
Code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#define IL inline
#define re register
#define LL long long
#define ULL unsigned long long
#define re register
#define debug printf("Now is %d\n",__LINE__);
using namespace std;
template<class T>inline void read(T&x)
{
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
}
inline int read()
{
int x=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
return x;
}
int G[55];
template<class T>inline void write(T x)
{
int g=0;
if(x<0) x=-x,putchar('-');
do{G[++g]=x%10;x/=10;}while(x);
for(re int i=g;i>=1;--i)putchar('0'+G[i]);putchar('\n');
}
int n,m,sx,sy,ex,ey,ans;
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
cin>>n>>m>>sx>>sy>>ex>>ey;
//Subtask1
if(abs(sx-ex)+abs(sy-ey)==1)
{
cout<<-1;
return 0;
}
//Subtask2
if(n<=3&&m<=3&&(ex-1<=1||n-ex<=1)&&(ey-1<=1||m-ey<=1))
{
cout<<1;
return 0;
}
//Subtask3
if(n<=2||m<=2)
{
//Subtask3.5
if((n==2||m==2)&&abs(sx-ex)*abs(sy-ey)==1)
{
if(m==2)
{
if((sx==1||sx==n)&&(ex==2||ex==n-1))
{
cout<<2;
return 0;
}
}
if(n==2)
{
if((sy==1||sy==n)&&(ey==2||ey==m-1))
{
cout<<2;
return 0;
}
}
cout<<3;
return 0;
}
cout<<2;
return 0;
}
//Subtask4
if(max(ex-1,ey-1)<=1||max(n-ex,m-ey)<=1||max(ex-1,m-ey)<=1||max(n-ex,ey-1)<=1)
{
//Subtask4.5
if(abs(sx-ex)*abs(sy-ey)==1) cout<<3;
else cout<<2;
return 0;
}
//Other Subtask
if(n==m&&m==3&&sy==sx&&sx==2&&(ex==1||ex==n)&&(ey==1||ey==m))
{
cout<<2;
return 0;
}
cout<<3;
return 0;
}
【2020.11.14提高组模拟】无尽之前 (game) 题解的更多相关文章
- 【2020.11.28提高组模拟】T1染色(color)
[2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...
- 【2020.11.28提高组模拟】T2 序列(array)
序列(array) 题目描述 给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...
- 【2020.11.30提高组模拟】剪辣椒(chilli)
剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...
- 【2020.11.30提高组模拟】删边(delete)
删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...
- JZOJ 【2020.11.30提高组模拟】剪辣椒(chilli)
题目大意 给出一棵 \(n\) 个节点的树,删去其中两条边 使得分出的三个子树大小中最大与最小的差最小 分析 先一边 \(dfs\) 预处理出以 \(1\) 为根每个点的 \(size\) 然后按 \ ...
- JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)
题目 你有一棵 \(n\) 节点的树 ,回答 \(m\) 个询问,每次询问给你两个整数 \(l,r\) ,问存在多少个整数 \(k\) 使得从 \(l\) 沿着 \(l \to r\) 的简单路径走 ...
- 11.5NOIP2018提高组模拟题
书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...
- 【2020.12.03提高组模拟】A组反思
估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...
- 【2020.12.01提高组模拟】卡特兰数(catalan)
题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...
- 【2020.12.01提高组模拟】A组反思
105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...
随机推荐
- angular+ionic项目,页面无法滚动的问题
在做angular+ionic+cordova项目时,遇到一个小小的问题,就是内容做完,页面无法滚动,导致内容显示不完整 首先我检查了样式,发现并没有给页面定死高度,再次检查结构发现,我并没有用ion ...
- mongodb查询某个字段数据
如下 db.集合名.find( {}, {需要查询的字段:1, _id:0} ) 例如 db.userInfo.find({}, {'created_at':1, _id: 0}) 默认会显示 _id ...
- Django实战项目-学习任务系统-任务管理
接着上期代码框架,开发第3个功能,任务管理,再增加一个学习任务表,用来记录发布的学习任务的标题和内容,预计完成天数,奖励积分和任务状态等信息. 第一步:编写第三个功能-任务管理 1,编辑模型文件: . ...
- anaconda创建新环境
博客地址:https://www.cnblogs.com/zylyehuo/ anaconda创建新环境 conda create -n 环境自定义的名称 python=版本号 anaconda指定路 ...
- 探秘Transformer系列之(17)--- RoPE
探秘Transformer系列之(17)--- RoPE 目录 探秘Transformer系列之(17)--- RoPE 文章总表 0x00 概述 0x01 总体思路 1.1 注意力机制回顾 1.2 ...
- Win7共享账号切换程序
服务器共享目录需要多账号登录时,需要重启电脑才可切换不同账号登 为了不重启电脑就可立即切换不同账号登,特意写了此款软件, 下载: 链接:https://pan.baidu.com/s/1g_4SCXl ...
- 理解Rust引用及其生命周期标识(下)
在上一篇文章中,我们围绕 "引用必然存在来源" 这一基本概念,介绍了Rust中引用之间的关系,以及生命周期标记的实际意义.我们首先从最简单的单参数方法入手,通过示例说明了返回引用与 ...
- 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
前言 .NET NativeAOT 想必不少开发者都已经很熟悉了,它可以将 .NET 程序集直接编译到原生的机器代码,从而可以脱离 VM 直接运行.简单的一句 dotnet publish -c Re ...
- hashtable底层
一.单线程环境下 底层:hash表结构 (数组 + 链表) 使用无参构造创建对象时 会默认长度11的数组 加载因子0.75 Hashtable<Object, Object> hashta ...
- 康谋分享 | 数据隐私和匿名化:PIPL与GDPR下,如何确保数据合规?(二)
在上期数据隐私和匿名化系列文章中,我们主要分享了<中国个人信息保护法>(PIPL)和<欧盟通用数据保护条例>(GDPR)在涵盖范围.定义.敏感信息等方面的异同点,今天,我们将重 ...