题解:P16681 玩具
fish_love_cat · · 题解
前一天熬夜所以状态烂完了,10min 左右搞完 A 结果半天没想出来 B,怕掉分就没打 /fad
我好困啊呜呜呜。该去睡午觉的,结果跑去看番了,等会 abc 也趋势了就好笑了。
考虑链怎么处理。
这个可以直接 dp,设计状态
答案的三个链方案相同,能否拼接取决于首尾的种类。
于是我们单独对每个情况处理 dp 就好。
合并列的答案,逐列再 dp 一遍就好了。
实现可以看代码。
#include<bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int dp[400005][2][2];
int dp2[10][2][2];
signed main(){
int n=341799;
dp[1][1][1]=5;
dp[1][0][0]=21;
for(int i=2;i<=n;i++){
dp[i][0][0]=(dp[i-1][0][0]+dp[i-1][0][1])*21%mod;
dp[i][0][1]=dp[i-1][0][0]*5%mod;
dp[i][1][0]=(dp[i-1][1][0]+dp[i-1][1][1])*21%mod;
dp[i][1][1]=dp[i-1][1][0]*5%mod;
}
dp2[1][0][0]=dp[n][0][0];
dp2[1][0][1]=dp[n][0][1];
dp2[1][1][0]=dp[n][1][0];
dp2[1][1][1]=dp[n][1][1];
dp2[2][0][0]=(dp2[1][0][0]+dp2[1][0][1]+dp2[1][1][0]+dp2[1][1][1])*21%mod*21%mod;
dp2[2][0][1]=(dp2[1][0][0]+dp2[1][1][0])*21%mod*5%mod;
dp2[2][1][0]=(dp2[1][0][0]+dp2[1][0][1])*5%mod*21%mod;
dp2[2][1][1]=(dp2[1][0][0])*5%mod*5%mod;
dp2[3][0][0]=(dp2[2][0][0]+dp2[2][0][1]+dp2[2][1][0]+dp2[2][1][1])*dp[n][0][0]%mod;
dp2[3][0][1]=(dp2[2][0][0]+dp2[2][1][0])*dp[n][0][1]%mod;
dp2[3][1][0]=(dp2[2][0][0]+dp2[2][0][1])*dp[n][1][0]%mod;
dp2[3][1][1]=(dp2[2][0][0])*dp[n][1][1]%mod;
dp2[4][0][0]=(dp2[3][0][0]+dp2[3][0][1]+dp2[3][1][0]+dp2[3][1][1])*21%mod*21%mod;
dp2[4][0][1]=(dp2[3][0][0]+dp2[3][1][0])*21%mod*5%mod;
dp2[4][1][0]=(dp2[3][0][0]+dp2[3][0][1])*5%mod*21%mod;
dp2[4][1][1]=(dp2[3][0][0])*5%mod*5%mod;
dp2[5][0][0]=(dp2[4][0][0]+dp2[4][0][1]+dp2[4][1][0]+dp2[4][1][1])*dp[n][0][0]%mod;
dp2[5][0][1]=(dp2[4][0][0]+dp2[4][1][0])*dp[n][0][1]%mod;
dp2[5][1][0]=(dp2[4][0][0]+dp2[4][0][1])*dp[n][1][0]%mod;
dp2[5][1][1]=(dp2[4][0][0])*dp[n][1][1]%mod;
cout<<(dp2[5][0][0]+dp2[5][0][1]+dp2[5][1][0]+dp2[5][1][1])%mod;
return 0;
}
//『要是威廉先生知道的话,一定会骂我的吧。』
//『要是纳莎妮亚知道的话,绝对会很傻眼吧。』
// 嘻嘻嘻地笑著。啊哈哈地笑著。她……她们是坏孩子。让那么为她们著想的人死去,不仅如此,现在也在违抗他们的意志,不停重复做一些让他们感到生气、傻眼的事。
//『虽然我没有资格获得幸福……』
//『但是……』
// 就算如此,也一定是……