首页 > 其他分享 >「SiR-1」Checkmate 题解

「SiR-1」Checkmate 题解

时间:2023-06-16 20:55:05浏览次数:48  
标签:SiR frac Checkmate val 题解 times 放置 棋盘 方块

题外话:本体题目出自番剧《NO GAME NO LIFE》且题目背景中

来吧,游戏开始了。

是第一季中男主“空”的口头禅。(强烈推荐观看《NO GAME NO LIFE ZERO》)

回归正题awa


P9355「SiR-1」Checkmate 题解

题目传送门

博客宣传

题目解读:

在 \(n\) 行 \(m\) 列的棋盘中放置多枚棋子,求出其上下左右未被放置棋子的格子数总和的最大值。

题目分析:

由题目可以得到在完全空白的棋盘中,放置在角上能得到 \(2\) 分,放置在棱上能得到 \(3\) 分,放置在中心块(非角、棱区域)能得到 \(4\) 分。在 \(1\) 行或 \(1\) 列时,头、尾部能得 \(1\) 分,中间部分能得 \(2\) 分。

对于 \(2 \times 1\) 的棋盘,放置在左方块(或右方块)上,能得到 \(1\) 分,接下来放置另一方块不会得分(即无贡献)。

拓展到 \(3 \times 1\) 的棋盘,无论先放置在中间的块,得到\(2\)分,还是放置在左右两块各得到 \(1\) 分,合计 \(2\) 分,亦或是从左到右(从右到左)依次排列全部都是 \(2\) 分。

如果我们不考虑已放置的棋子对后面其它棋子产生的影响(即只考虑每一枚棋子单独放置时的得分),将它们的得分相加,我们会发现刚好是上述讨论情况中最高分值的 \(2\) 倍

另一种更加科学的证明

首先我们先思考放置一枚棋子能带来什么影响(可以先思考一下再接着看)。

设棋盘可以得到的分数为 \(val\),棋盘上的角方块数为 \(T\),棱方块(不包括角方块)数为 \(L\),中心方块(即非角、非棱的方块)数为 \(M\)。

我们在理想的情况下得到的分数是 \(val = 2 \times T + 3 \times L + 4 \times M\),也就是每个块都贡献出了它所能贡献的最大分数,但是毕竟我们应该考虑影响......

于是乎在考虑影响的情况下,我们的每一次放置都将获得一个分值,但是总分数(就是理想情况下的分数)将减去这个分值。因此,我们在考虑影响的情况下的能获得的分值是 \(val = \frac{2 \times M + 3 \times L + 4 \times M}{2}\)。

如图所示:

示例

分类讨论情况如下:

1. 当 \(n≥ 2\) 且 \(m ≥ 2\) 时

\(val=\frac{2\times T + 3 \times L + 4 \times M}{2}\)

2. 当 \(n=1\) 或 \(m=1\) 时

\(val=n+m-2\) (每个块能得 \(2\) 分,左右或上下块与中间的块相比各少 \(1\) 分)。
由于 \(n=1\) 或 \(m=1\) ,可得 \(val=n-1\) 或 \(val=m-1\) (合并的时候能用到) 。
从某种意义上来讲就是影响互相抵消。

以上是赛时思路,接下来是合并推导

最终答案为 \(val=\frac{2\times T + 3 \times L + 4 \times M}{2}\)。

根据前文分析得出上方完整式子,接下来对这个式子进行推导:

我们依旧用 \(T,L,M\) 分别代表角、棱、中心块数量,对于每个棋盘,易得

\[T = 4 \]

\[L = 2 \times n + 2 \times m - 2 \times T \]

\[M = n \times m - T - L \]

则总得分为

\[val = \frac{2 \times T + 3 \times L + 4 \times M}{2} \]

代入 \(T,L,M\) 可得

\[val = 2 \times n \times m - n - m \]

将 \(n = 1\)代入此式可得

\[val = m - 1 \]

将 \(m = 1\)代入此式可得

\[val = n - 1 \]

当 \(m = n = 1\) 时

\[val = m + n - 2 \]

综上,\(val = n + m - 2\) 被 \(val = \frac{2 \times T + 3 \times L + 4 \times M}{2}\) 所包含。

赛时AC代码如下

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
	ll T;
	scanf("%lld",&T);
	for(ll i=1;i<=T;++i)
	{
		ll n,m,a,b,c,sum;
		scanf("%lld%lld",&n,&m);
		a=4;
		b=2*n+2*m-2*a;
		c=n*m-a-b;
		sum=(a*2+b*3+c*4)/2;
		printf("%lld\n",sum);
	}
	return 0;
}

于是乎我推荐大家试试[THUPC 2023 初赛] 大富翁
感觉两题有相似之处(?)。
我是蒟蒻,加之本题解赶工严重,还请各位大佬指出错误,一同进步。(点个赞再走吧,QAQ)

标签:SiR,frac,Checkmate,val,题解,times,放置,棋盘,方块
From: https://www.cnblogs.com/AnEasySong/p/sir-1checkmate-ti-xie.html

相关文章

  • 【BZOJ 3156】防御准备 题解
    原题令\(S_{i}=\sum_{j=1}^{i}j\),\(f_{i}\)为处理到第\(i\)个位置放置守卫塔的最小花费。观察题意,容易得到在\((1<=j<=i-1)\)时,有\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)+a_{i}\right\}\)①\(f_{i}=min\left\{f_{j}+\sum_{k=j+1}^{i-1}(i-k)\ri......
  • Linux中-bash: /dev/null: Permission denied问题解决
    云上架构2021年08月06日09:19 ·  阅读682​今天在Centos7上运行如下命令 shell复制代码######添加hdfs用户#####useraddhdfs######切换至hdfs用户#####su-hdfs报如下错误 javascript复制代码-bash:/dev/null:Permissiondenied-bash......
  • [ABC114D] 756 题解
    题目链接题意给定一个数\(n\),求\(n!\)的因数中,刚好有\(75\)个因数的数的个数。分析首先有这样一个性质,对于一个数\(a\),我们将其分解质因数,即\[a=\prod_{i=1}^{n}p_i^{k_i}\]那么,\(a\)的因数个数就是\[sum=\prod_{i=1}^{n}(k_i+1)\]简单证明一下,对于第......
  • Alien 的排列题解
    Description求出有多少\(2\simn+1\)的排列\(\{P_{n}\}\),使得对于所有\(1\leqi\leqn\)有\(i|P_{i}\)。对于\(30\%\)的数据\(n\leq10\)。对于\(90\%\)的数据\(n\leq3000\)。对于\(100\%\)的数据\(n\leq10^9\)。Solution如果把\(n+1\)固定在第\(1\)个......
  • 问题解决sql文件上传和蚁剑连接
    1.无法连接上自己的ip:发现问题是上传的木马不在127.0.0.1的文件下时,会导致解析不到木马,要将木马上传到127.0.0.1的文件下连接2.解决sql上传一句话木马问题要先在mysql的配置文件my.ini中添加导入导出数据库的地址:secure_file_priv=D:\phpstudy_pro\WWW然后重启数据库,可以进行sq......
  • [ZJOI2022] 深搜 题解
    题目描述九条可怜是一个喜欢算法的女孩子,在众多算法中她尤其喜欢深度优先搜索(DFS)。有一天,可怜得到了一棵有根树,树根为\(\mathit{root}\),树上每个节点\(x\)有一个权值\(a_x\)。在一棵树上从\(x\)出发,寻找\(y\)节点,如果使用深度优先搜索,则可描述为以下演算过程:将递归栈......
  • 关于display:flex;justify-content: space-between;的最后一个元素无法左对齐的问题解
    1.问题:当使用v-for遍历一个数组,当数字长度不是要进行左右对齐的数字的倍数*(以3为例),无法进行左对齐的问题 解决方法:1.使用watch监听这个数组的长度的变化,判断这个数组的长度是否3%2是不是等于0,如果是为则这个数字追加一个空对象,代码如下:watch:{rowsForm:{......
  • [问题解决]:ImportError: /home/test/anaconda3/envs/py39/bin/../lib/libstdc++.so.6
    报错(py39)test@test:~/code/Face/test_speed$pythonface_yaw_pitc_roll.pyTraceback(mostrecentcalllast):File"/home/test/code/Face/test_speed/face_yaw_pitc_roll.py",line17,in<module>importdlibFile"/home/test/anacon......
  • P2801 教主的魔法 题解
    一、题目描述:给你一个长度为$n$的序列$a$,你需要进行$m$次操作。$类型\1\:将区间\l\到\r\的数加\x\。$$类型\2\:求区间\l\到\r\中有多少个数大于等于\x\。$数据范围:$1\len\le1\times10^6,m\le3\times10^3$ 二、解题思路:......
  • JAVA面试题解惑系列(八)——聊聊基本类型(内置类型)
    关键字:java面试题基本类型intlongbooleanfloatdoublechar作者:臧圩人(zangweiren)基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将从面试中常考的几个方面来回顾一......