P7186 Solution

发布时间 2024-01-06 16:22:25作者: AffectionateCat

Preface

好久之前 随机跳题跳到这道题。既然现在都没有题解,那我就来水一发。

Problem

给出一个 \(N\times N\) 的,标号初始为有规律 \(1\dots N\times N\) 的网格。有 \(K\) 个关键点与其对应的位置,对于每个关键点,依次把该行向右循环平移直到与对应位置列坐标相等;接着把该行向右循环平移直到与对应位置行坐标相等。求对于每个关键点总共需要的平移次数,询问之间相互影响。

\(2 \leq N \leq 10^4, 1 \leq K \leq 10^3\)

Solution

套路题。

我们先考虑暴力模拟这个过程。诶你会发现这个操作可以直接暴力做到 \(\mathcal O(KN^2)\),小小优化一下可以 \(\mathcal O(KN)\)

但是瓶颈在于每次操作之后找到下一个被操作的点是 \(\mathcal O(KN^2)\) 的,怎么优化都没用。

那么我们考虑直接存每个关键点的位置。这样你就会发现 其它的点都是冗余信息 了,每次循环平移只尝试改变关键点的位置即可。

时间复杂度 \(\mathcal O(K^2)\)