EVERYTHING HAPPENS FOR THE BEST!|

wnsyou

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

2023-03-03 22:24阅读: 59评论: 0推荐: 0

abc232_e Rook Path 题解

Rook Path

题意

有一个 nm 列的矩阵,有一只乌鸦在 (x1,y1) 上,它想要去 (x2,y2)

乌鸦可以飞 k 次:

  • 假设乌鸦现在在 (x,y),它可以选择以下两种情况中的任意一种执行。
    1. 飞到 (x,y) 并且 (yy)
    2. 飞到 (x,y) 并且 (xx)

问有多少种方法,使得 k 次操作后乌鸦能落到 (x2,y2)

方案数要对 998244353 取模。

对于 i (1i<k)i 次操作后是可以在 (x2,y2)

数据范围

  • 1n,m109
  • 1k106
  • 1x1,x2n
  • 1y1,xy2m

思路

爆搜是不可能AC的。

但是,通过暴力输出dp数组,我们可以发现:不是每种情况都是需要算的,某些情况是重复的!

结果可以分为四类,如下图,每种颜色代表一种答案。

  • 设起点为 (x1,y1)
    1. (x1,y1)
    2. (x1,y)(yy1)
    3. (x,y1)(xx1)
    4. (x,y)(xx1,yy1)

继续画图来找规律

下面的同行同列指的是与起点同行或同列。

1|(x1,y1)

同行同列的格子可以转移到这个格子上

  • 同行格子数(减去起点)m1
  • 同列格子数(减去起点)n1

2|(x1,y)(yy1)

同行的格子、起点以及不同行且不同列的格子可以转移到这个格子上

  • 同行格子数(减去起点和自己)m2
  • 起点:1
  • 不同行且不同列的格子:n1

3|(x,y1)(xx1)

同列的格子、起点以及不同行且不同列的格子可以转移到这个格子上

  • 同列格子数(减去起点和自己)n2
  • 起点:1
  • 不同行且不同列的格子:m1

4|(x,y)(xx1,yy1)

同列的格子、同行的格子以及不同行且不同列的格子可以转移到这个格子上

  • 同列格子数:1
  • 同行格子数:1
  • 不同行且不同列的格子:n+m4

复杂度

  • 时间:O(k)
  • 空间:O(4×k)

Code

点击查看代码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int mod = 998244353, K = 1e6 + 1;
int n, m, k, sx, sy, ex, ey;
long long dp[K][6], ans;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> m >> k >> sx >> sy >> ex >> ey;
dp[0][0] = 1;
for (int i = 1; i <= k; i++) {
dp[i][0] = (dp[i - 1][1] * (m - 1) % mod + dp[i - 1][2] * (n - 1) % mod) % mod;
dp[i][1] = (dp[i - 1][0] + dp[i - 1][1] * (m - 2) % mod + dp[i - 1][3] * (n - 1) % mod) % mod;
dp[i][2] = (dp[i - 1][0] + dp[i - 1][3] * (m - 1) % mod + dp[i - 1][2] * (n - 2) % mod) % mod;
dp[i][3] = (dp[i - 1][1] + dp[i - 1][2] + dp[i - 1][3] * (n + m - 4) % mod) % mod;
}
if (ex == sx && ey == sy) {
ans = dp[k][0];
} else if (ex == sx) {
ans = dp[k][1];
} else if (ey == sy) {
ans = dp[k][2];
} else {
ans = dp[k][3];
}
cout << ans;
return 0;
}

本文作者:wnsyou の blog

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

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

posted @   wnsyou  阅读(59)  评论(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}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示