abc232_e Rook Path 题解
1.CSES 1667 Message Route 题解2.P3956 棋盘 题解3.abc233_f Swap and Sort 题解4.abc233_e Σ[k=0..10^100]floor(X/10^k) 题解5.abc233_d Interval 题解6.abc233_c Product 题解7.abc249_f Ignore Operations 题解8.abc249_d Index Trio 题解9.abc248_e K-colinear Line 题解10.abc247_f Cards 题解11.CF1066C Books Queries 题解12.P1038 神经网络 题解13.SeekLuna P1362 拓扑排序 3 题解
14.abc232_e Rook Path 题解
15.abc235_e MST + 1 题解16.abc234_e Arithmetic Number 题解17.P8786 李白打酒加强版 题解18.abc235_d Multiply and Rotate 题解19.CF1095D Circular Dance 题解20.P6201 & P1985 Fliptile S 题解21.CF1183C Computer Game 题解22.CF1095E Almost Regular Bracket Sequence 题解23.abc256_e Takahashi's Anguish 题解24.abc260_g Scalene Triangle Area 题解25.P8714 填空问题 题解26.abc252_d Distinct Trio 题解27.abc252_f Bread 题解28.abc253_e Distance Sequence 题解29.abc250_e Prefix Equality 题解30.abc250_d 250-like Number 题解31.arc164_a Ternary Decomposition 题解32.abc275_f Erase Subarrays 题解33.abc275_e Sugoroku 4 题解34.abc274_d Robot Arms 2 题解35.abc260_f Find 4-cycle 题解36.abc260_e At Least One 题解37.abc273_e Notebook 题解38.abc271_f XOR on Grid Path 题解39.abc271_e Subsequence Path 题解40.abc271_c Manga 题解41.abc269_f Numbered Checker 题解42.abc270_f Transportation 题解43.CF1077E Thematic Contests 题解44.CF1935D Exam in MAC 题解45.CF1144G Two Merged Sequences 题解46.joi2022_yo2_c 国土分割 (Land Division) 题解47.P3588 PUS 题解48.CF1946F Nobody is needed 题解Rook Path
题意
有一个
乌鸦可以飞
- 假设乌鸦现在在
,它可以选择以下两种情况中的任意一种执行。- 飞到
并且 - 飞到
并且
- 飞到
问有多少种方法,使得
方案数要对
对于
数据范围
思路
爆搜是不可能AC的。
但是,通过暴力输出dp
数组,我们可以发现:不是每种情况都是需要算的,某些情况是重复的!
结果可以分为四类,如下图,每种颜色代表一种答案。
- 设起点为
继续画图来找规律
下面的同行同列指的是与起点同行或同列。
1|
同行同列的格子可以转移到这个格子上
- 同行格子数(减去起点):
- 同列格子数(减去起点):
2|
同行的格子、起点以及不同行且不同列的格子可以转移到这个格子上
- 同行格子数(减去起点和自己):
- 起点:
- 不同行且不同列的格子:
3|
同列的格子、起点以及不同行且不同列的格子可以转移到这个格子上
- 同列格子数(减去起点和自己):
- 起点:
- 不同行且不同列的格子:
4|
同列的格子、同行的格子以及不同行且不同列的格子可以转移到这个格子上
- 同列格子数:
- 同行格子数:
- 不同行且不同列的格子:
复杂度
- 时间:
- 空间:
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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步