首页 > 其他分享 >P10528 [XJTUPC2024] 崩坏:星穹铁道 题解

P10528 [XJTUPC2024] 崩坏:星穹铁道 题解

时间:2024-05-29 11:44:00浏览次数:14  
标签:end matrix 星穹 题解 XJTUPC2024 ans cases unit rmm

头图

无语了,猜猜WA哪了

不要
真头图

image

image


崩坏:星穹铁道

题链 这么简单做不对不许玩崩铁!

题目大意

给你行动的总次数 \(n\) 和初始战技点数量 \(k\),以及编队里四名角色的行动类型,求不同行动方式的方案数。

类型如下:

image

思路

先考虑 dp,分角色类型讨论。

设 \(f_{i,k}\) 表示第 \(i\) 动,剩 \(j\) 个点。

当 \(a=1\) 时,由于角色只能打点,点数上限为 \(5\),所以得到:

\[f_{i,k}= \begin{cases} f_{i-1,k-1} (j\neq0) \\ f_{i-1,5} (k=5) \end{cases} \]

当 \(a=2\) 时,角色有点耗点,没点打点,能得到:

\[f_{i,k}= \begin{cases} f_{i-1,k+1} (k\neq5) \\ f_{i-1,k-1} (k=1) \end{cases} \]

当 \(a=3\) 时,角色既能打点,也能耗点,且满足战技点的范围,得到:

\[f_{i,k}= \begin{cases} f_{i-1,k+1} (k\neq 5) \\ f_{i-1,k-1} (k\neq0) \\f_{i-1,k} (k=5) \end{cases} \]

结合三者,即可得到状态转移方程。

那么复杂度为 \(O(n)\),题目中 \(n<=1^{18}\),男蚌

怎么加速?矩阵快速幂!

矩阵怎么找?简单。把不同情况的转移结果按表格列出来,发现:标 \(1\) 的是转移结果,也就是动后的点数。

结果如下:

\[T[1]=\left[ \begin{matrix} 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ \end{matrix} \right] \]

\[T[2]=\left[ \begin{matrix} 0 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ \end{matrix} \right] \]

\[T[2]=\left[ \begin{matrix} 0 & 1 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 1 \\ \end{matrix} \right] \]

其中 \(T[i]\) 表示 \(i\) 类型的角色。

再根据 dp,定义 \(C_i=C_{i-1}\times T_{a_i}\)。

这样快速幂结果为 \(ans=C_4^{\lfloor {\frac{n}{4}} \rfloor}\times C_{n \,mod \,4}\)。

答案为 \(\sum_{i=0}^5 ans_{0,i}\)。

注意

开\(\Huge{\,long\,\,long\,}\)啊!

code:

const int mod=998244353;
ll n,k,hksr;
ll a[5];
struct rmm
{
    ll a[6][6];
    rmm(){memset(a,0,sizeof a);}
}T[4],unit,B;
rmm operator*(const rmm &a,const rmm &b)
{//重载矩阵乘
    rmm ans;
    fo(i,0,5)
        fo(j,0,5)
            fo(k,0,5)
                ans.a[i][j]=(ans.a[i][j]+a.a[i][k]*b.a[k][j]%mod)%mod;
    return ans;
}
namespace Wisadel
{
    rmm Wqp(rmm a,ll b)
    {//矩阵快速幂
        rmm ans;
        ans=unit;
        while(b)
        {
            if(b&1ll)
                ans=ans*a;
            a=a*a;
            b>>=1ll;
        }
        return ans;
    }
    short main()
	{
        n=qr,k=qr;
        T[1].a[0][1]=T[1].a[1][2]=T[1].a[2][3]=T[1].a[3][4]=T[1].a[4][5]=T[1].a[5][5]=1;
        T[2].a[1][0]=T[2].a[0][1]=T[2].a[2][1]=T[2].a[3][2]=T[2].a[4][3]=T[2].a[5][4]=1;
        T[3].a[0][1]=T[3].a[1][2]=T[3].a[2][3]=T[3].a[3][4]=T[3].a[4][5]=T[3].a[5][5]=1,
        T[3].a[1][0]=T[3].a[0][1]=T[3].a[2][1]=T[3].a[3][2]=T[3].a[4][3]=T[3].a[5][4]=1;
        unit.a[0][0]=unit.a[1][1]=unit.a[2][2]=
        unit.a[3][3]=unit.a[4][4]=unit.a[5][5]=1;
        B=unit;
        //unit 是1矩阵(初始矩阵) 乘任何矩阵等于它本身
        fo(i,1,4)
            a[i]=qr,B=B*T[a[i]];
        rmm R,ans;
        R.a[0][k]=1;
        ans=R*Wqp(B,n/4);
        for(int i=0;i<n%4;i++)
            ans=ans*T[a[i%4+1]];
        //这是少算的那部分
        fo(i,0,5)
            hksr=(hksr+ans.a[0][i])%mod;
        printf("%lld\n",hksr);
        //Honkai: Star Rail!
        return Ratio;
	}
}
完结撒花

火~
image

标签:end,matrix,星穹,题解,XJTUPC2024,ans,cases,unit,rmm
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18219911

相关文章

  • DockerDesktop中启动jenkins容器时提示:Can not write to /var/jenkins_home/copy_ref
    场景Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139264096按照以上教程搭建之后想要运行jenkins容器,所以执行如下指令dockerrun-d--namejenkins-p18088:8080-v/jenkinshome:......
  • CCF-CSP真题《202403-1 词频统计》思路+python满分题解
    哇q(≧▽≦q),第一次写博客,请大家多多关照○| ̄|_ 看到没啥人提供202403的第一题解题思路及python代码,刚好写完,心血来潮想分享解题思路,就写下了这篇博客,有其他的编码版本,欢迎大家一起探讨呀(虽然我是算法菜鸟┗(T﹏T)┛,但有问题,我会尽力回答的!!!)好了废话不多说,上解题思路!大概想了......
  • P6049 燔祭 题解
    题意:计算满足如下条件的带标号有根树数量:这棵树一共有\(n\)个节点。每个节点都有一个整数权值,且在区间\([1,m]\)内。每个节点的权值都不大于其父节点的权值。\(n,m\le400\)思路:好题。对于这种计数问题,肯定第一眼会想到\(dp\),我们设\(f_{n,m}\)表示\(n\)个点......
  • ICPC2024昆明邀请赛 J The Quest for El Dorado 题解
    QuestionTheQuestforElDorado有一个王国,有\(n\)个城市和\(m\)条双向铁路连接这些城市。第\(i\)条铁路由第\(c_i\)家铁路公司运营,铁路的长度为\(l_i\)。你想要环游这个国家,从城市\(1\)出发。为了你的旅行,你购买了\(k\)张火车票。第\(i\)张火车票用两个整数\(......
  • 题解/算法 {C. Goose Goose Duck}
    题解/算法{C.GooseGooseDuck}@LINK:https://codeforces.com/gym/105184;令A[N]表示这N个人的区间;比如答案是[a,b,c,d]那么他一定满足:A[a].lef<=0<=A[a].rig,A[b].lef<=1<=A[b].rig,A[c].lef<=2<=A[c].rig,…贪心;对于最开头的人来说,令集合S:......
  • 题解/算法 {J - Iris‘ Food}
    题解/算法{J-Iris’Food}@LINK:https://codeforces.com/gym/105184;比如最终答案是:10...01...12...23...3,则其值为1*10^?+(1...1)*10^?+(2...2)*10^?...;因此,如何求2....2这个值(长度为1e9),使用矩阵优化DP,DP定义为:DP[i]:长度为i的2...2的大......
  • 【问题解答】渲染农场的 10 个常见问题,助您轻松上手
    渲染农场是3D动画和效果图设计领域的强大工具。它们提供使复杂场景和动画所需的计算能力。在本文中,小编将解答有关渲染农场的10个常见问题,为初学者和经验丰富的专业人士提供见解和指导。1.渲染农场值得吗?渲染农场有多种益处,尤其是在提高3D项目的效率和节约成本方面。这里以......
  • MySQL常见问题解答:初学者常遇到的疑惑与解决方案
    MySQL是一种常用的关系型数据库管理系统,用于存储和管理大量的数据。对于初学者来说,可能会遇到一些问题和困惑。下面是一些常见问题的解答和解决方案:1.安装和配置MySQL您可以按照以下步骤进行操作:1.1下载MySQL安装包:您可以从MySQL官方网站MySQL::下载MySQL社区服务......
  • [博客迁移20190713]题解 P4169 【[Violet]天使玩偶/SJY摆棋子】
    《算法竞赛》书上例题(可惜原书没代码)天使玩偶,一道好题。(书p243)我就来谈谈自己的想法吧!而总有人在这种明明可以离线处理的三维偏序问题上投机取巧。如:KDtree。蒟蒻想说,KDtree在这题复杂度是不对的。虽有剪枝,可是还是有可能遍历整棵树的(期望复杂度不靠谱)对上述看法有争议的,请跳......
  • QT | 文件读写过程中丢失的 OD OA 问题解决
    今天发现QT以文本方式(QIODevice::Text)写入二进制0x0A会出现问题,写入的是一个字节(实际应该是两个字节),结果在Zed上看,显示是2个字节。明显每个0x0A前都多了个0x0D,导致我的bin文件全部都错位了期望的效果应该是原来按照字节流的形式输出文本时,ofstream会自动将输......