首页 > 其他分享 >qbxt 突破营 Day1 T4

qbxt 突破营 Day1 T4

时间:2023-10-08 15:34:48浏览次数:40  
标签:nm leq T4 积木 Day1 qbxt 坐标 复杂度 下落

考虑经典的俄罗斯方块游戏,二维平面上有若干个积木,他们会受重力的影响下落并堆叠。注意,积木只会竖直下落,如果下落过程中碰到了别的积木那么就会停下。例如下图:

01.png

不同颜色的块代表了不同的积木,这些积木下落之后会形如下图:

02.png

积木的形状可以任意的,可能跟传统的俄罗斯方块有一些不同,比如下图:

03.png

这张图中的积木下落后应该是这样的:

04.png

本题中,我们分别用#.表示有/无积木覆盖。为了方便起见,我们认为一个四联通块是一块积木。对于两个有积木覆盖的位置,如果他们共用一条边,则我们认为他们相邻,相邻的块构成的连通块被称为四联通块。

在本题中,有一个给定的坐标 \((R,C)\)(第 \(R\) 行第 \(C\) 列,1下标),保证这个坐标一定被积木覆盖,你需要计算对于所有的.替换成#的情况(注意,此时的四联通块可能会有变化),这个给定的坐标内的#下落到哪个坐标。同时为了不让输出成为时间瓶颈,你只需要输出一个验证码即可。

具体来说,如果平面内有 \(k\) 个.,他们的坐标分别是 \((r_1,c_1),(r_2,c_2),...,(r_k,c_k)\)(满足从左上到右下,即\((\forall i)(\forall j)(i\in \mathbb{N} \bigwedge j\in \mathbb{N}\land 1\leq i<j\leq k \rightarrow r_i<r_j \bigvee(r_i=r_j\land c_i<c_j))\)。将把仅 \((r_i,c_i)\) 替换成#后 \((R,C)\) 下落到的坐标记为 \((R_i,C_i)\),则你需要输出 \((\sum_{i=1}^{k} R_i\times 2021^{k- i}) \bmod 998244353\)。(\(\bmod 998244353\) 即对 \(998244353\) 做除法之后的余数)

对于所有数据,\(1\leq n\times m\leq 10^7\), \(1\leq R\leq n\), \(1\leq C\leq m\), 保证\((R,C)\)的位置是'#'。

非常好的一道题

先考虑 \(nm \leq 2000\) 的部分,考虑模拟下落过程,设 \(d_i\) 表示第 \(i\) 块下落距离。

考虑同一列上两个相邻的 # ,设他们所在连通块分别为 \(u,v\) ,则显然我们要求 \(d_u \leq d_v + l - 1\) ,其中 \(l\) 两个 # 间隔距离

这是什么?差分约束!直接建图跑最短路,复杂度 \(O((nm)^2 \log nm)\)

显然可以优化,因为当在图中加入一个 # 无非就是加入至多 \(4\) 条边和一个点

但我们要求的还是从超级源 \(S\rightarrow (R,C)\) 的最短路。我们为什么不从 \(S\) 跑一边最短路, \((R,C)\) 跑一边最短路,然后合并呢?

复杂度优化成了 \(O(nm \log nm)\)

继续优化,我们要想尽办法把 \(\log\) 去掉。发现复杂度瓶颈在 dijkstra

这时候突然想起luogu上一个水帖:把边权为 \(w\) 的边拆成 \(w\) 个为 \(1\) 的边跑 bfs 复杂度就变成 \(O(n)\) 了

我们也考虑这么拆点,因为 \(l \leq \max(m,n)\) ,而且这个图我们显然可以建成一个网格图,复杂度是不变的。于是我们有以下建图思路:

相邻的两个 # 之间连 \(0\) 边,.. 之间连 \(1\) ,#. 上方时连 \(1\) ,下方连 \(0\) 。最终跑 01bfs 。复杂度 \(O(nm)\)

标签:nm,leq,T4,积木,Day1,qbxt,坐标,复杂度,下落
From: https://www.cnblogs.com/fox-konata/p/17749181.html

相关文章

  • Day15 名称空间与作用域的使用
    1.Day14复习_1: 2.Day14复习_2: 3.命名关键字参数: 4.组合使用:5.名称空间: 6.名称空间的加载顺序: 7.示范一,示范二名称空间嵌套关系: 8.示范三,函数嵌套定义: 9.示范四,变量一定要先定义后引用: 10.作用域_内置名称空间: 11.作用域_全局名称空间: 12.作用域_......
  • 再谈 qbxt2023国庆刷题 Day7 T2 树
    T2倍增+换根即可,但赛时难写赛时想得线段树二分,也可from:https://www.cnblogs.com/fox-konata/p/17742669.html回头一看老师代码,发现换根换的非常神奇,长见识了方法0:第一次思考,以为要记录走排名为\(a_x\)和\(a_x+1\)的两个倍增数组,但发现并不好合并,也许可以憋出来,但还是......
  • Day14.形参与实参的介绍和具体使用
    1.形参与实参:  2.位置参数:  3.关键词参数:  4.默认参数__默认形参: 5.位置形参与默认形参混用强调点一和二: 6.位置形参与默认形参混用强调点三: 7.1.可变长度的位置参数: 7.2.可变长度的参数_2星号可以用在实参中: 8.可变长度的关键字参数: 9.可变......
  • LLM实践-在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理
    一、配置环境1、打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4GPU.2、pip安装依赖python包!pipinstall--upgradeaccelerate!pipinstallbitsandbytestransformers_stream_generator!pipinstalltransformers!pipinstallsentencepiece!pip......
  • 谷粒商城 -day1
    1、安装虚拟机virtualbox 下一步,小白安装,直接下一步 2、安装vagrant,更好的新建虚拟机 ......
  • qbxt2023国庆刷题 Day6 ~ Day7
    Day6\(100+30+100+0,rk3\),考成这样还能\(rk3\),好怪啊虽然但是\(T3\)是在\(oeis\)上找的,虽然写了随机数但还是运气好过掉了\(T2\)应该是写寄了吧,感觉自己做法并没有什么问题T1比较典的题,并查集维护下一个没被删的点即可复杂度\(O((n+Q)\alpha(n))\)T2题目里的同......
  • ext4文件系统的superblock修复
    操作系统版本[✔️]CentOS7.x/RHEL7.x问题描述ext4文件系统的superblock损坏,利用备份块恢复修复过程检查文件系统fsck.ext4/dev/sdb-a:自动修复文件系统,不询问任何问题-A:依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统-t<文件系统类型>:指定要......
  • CTF学习 Day1
    尝试两个例题:将\(16\)进制编码转化为Base64编码(Converthextobase64)。Input49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6dOutputSSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29tPython居然......
  • P7167 [eJOI2020 Day1] Fountain 题解
    Description给定\(n\)个从上往下圆心重叠的圆盘,给定每个圆盘的直径\(d_i\)和容量\(c_i\),所有圆盘底下有一个容量为\(\infty\)的水池,编号为\(0\)。\(q\)次询问,每次给定\(r\)和\(v\)表示往第\(r\)个圆盘里倒\(v\)的水,输出水最后流到哪个圆盘会停止。Solution倍......
  • qbxt2023国庆刷题
    Day0晚上玩恐怖游戏好吓人\(QwQ\)Day1rk4有小奖品T1没什么好说的T2原题给定一个等差数列,求他的各项乘积,你只需要输出其对\(1145141\)取模的结果。具体的,每组给定\(d,n,a\)分别表示公差,长度,首项,你需要求出\(\prod_{i=0}^{n-1}(a+i\timesd)\mod1145141\)。非......