EVERYTHING HAPPENS FOR THE BEST!|

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-05-18 11:46阅读: 35评论: 0推荐: 0

abc269_f Numbered Checker 题解

Numbered Checker

题意

有一个 n×m 的方格矩阵,左上角是 (1,1),右下角是 (n,m),每个方格中都有一个整数,其中 (x,y) 中的数字为:

  • 如果 x+y 是奇数,则 (x,y) 中的数字为 0
  • 否则,(x,y) 中的数字为 (x1)×m+y

Q 组询问,每组询问给定四个整数 a,b,c,d,求所有满足要求的 (i,j) 中的数字之和:

  • aib
  • cjd

答案对 998244353 取模。

思路

等差数列求和。

对于每组询问

暴力时间复杂度:O(n×m),爆炸。

推导壹

就拿第一个样例举例子。

可以很明显地发现,奇数行与偶数行排列虽然不太一样,但两者都是等差数列且公差为 2

经过仔细地推导(不给推导过程,自己推去),我们可以发现:

  • 对于 a+c 为奇数的情况下:
    • a 行的等差数列首项为 (a,c+1),项数为 dc+12
    • a+1 行的等差数列首项为 (a+1,c),项数为 1+dc2
  • 对于 a+c​ 为偶数的情况下:
    • a 行的等差数列首项为 (a,c),项数为 dc2+1
    • a+1 行的等差数列首项为 (a+1,c+1),项数为 dc+12

(以上除法均需带有向下取整)。

时间复杂度:O(n),还是不够优秀。

推导贰

可以发现,行与行之间也是等差数列!公差为 2m

令当前询问第 a 行的等差数列之和为 sum,项数为 p;第 a+1 行的等差数列之和为 num,项数为 q

还是不给推导过程,答案就可以变成两个等差数列:

  • 第一个:以 sum 为首项,公差为 2×m×p,项数为 ba2+1
  • 第二个:以 num 为首项,公差为 2×m×q,项数为 ba+12

求出两个等差数列之和,将其加起来就是答案啦,注意取模细节。

时间复杂度:O(1)

复杂度

  • 时间:O(Q)
  • 空间:O(1)

Code

点击查看代码
#include <iostream>
using namespace std;
using ll = long long;
const int mod = 998244353;
ll n, m, t, a, b, c, d, p, q, sum, num;
ll id (ll x, ll y) { // 将坐标转数值
return ((x - 1) * m + y) % mod;
}
ll Sum (ll s, ll d, ll n) { // 等差数列求和公式
return (s * n + n * (n - 1) / 2 % mod * d % mod) % mod;
}
int main () {
ios::sync_with_stdio(0), cin.tie(0);
for (cin >> n >> m >> t; t; t--) {
cin >> a >> b >> c >> d;
p = (d - c + 1) / 2, q = (d - c) / 2 + 1;
if ((a + c) % 2) {
sum = Sum(id(a, c + 1), 2, p), num = Sum(id(a + 1, c), 2, q); // 套用公式
} else {
swap(p, q);
sum = Sum(id(a, c), 2, p), num = Sum(id(a + 1, c + 1), 2, q);
}
cout << (Sum(sum, 2 * m * p % mod, (b - a) / 2 + 1) + Sum(num, 2 * m * q % mod, (b - a + 1) / 2)) % mod << '\n'; // 各种取模细节
}
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17411499.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(35)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
战 歌 - 此去经年
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 此去经年

作曲 : 此去经年

编曲 : 此去经年

啊啊啊啊啊

啊啊啊啊

啊啊啊

啊啊

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示