Skip to main content
Original134 words1 min

题解:P8152 「PMOI-5」破译

Summary

边长为 1 的正方形做 k 次分割,每次把当前右下角那块划成 n×n 个小矩形,求最终矩形总数对 998244353 取模。每次分割用 n 方块换掉一块,净增 n 方减一,k 次相互独立,总数即 k 乘以 n 方减一再加一。n 可达十亿,平方需用 64 位整数,按式取模输出。时间复杂度 O(1)。

题意简述​

边长为 11 的正方形做 kk 次分割,每次把当前右下角的那块分成 n×nn\times n 个小矩形。求最终矩形总数,对 998244353998244353 取模。

解题思路​

每次分割把一块矩形换成 n2n^2 块,净增 n2−1n^2-1 块。kk 次分割各自独立,矩形总数即 k(n2−1)+1k(n^2-1)+1,按式取模输出。注意 n≤109n\le10^9,n2n^2 需用 6464 位整数。

时间复杂度为 O(1)O(1)。

参考代码​

229 Bcpp
#include <bits/stdc++.h>
using namespace std;

using ll=long long;
const int mod=998244353;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n,k;
cin>>n>>k;
cout<<((n*n-1)%mod*(k%mod)+1)%mod<<'\n';
return 0;
}