首页 > 其他分享 >ABC298E 题解

ABC298E 题解

时间:2023-04-22 11:13:10浏览次数:45  
标签:int 题解 texttt ans ABC298E dp mod

前言

题目传送门!

更好的阅读体验?

题解区的代码都好丑啊,嘲讽。

思路

对于这种概率题,正常人都能反应到这是 dp。

所以:\(dp_{t, i, j}\) 表示:当前是第 \(t\) 回合,Tak 在 \(i\) 位置,Aok 在 \(j\) 位置,概率。

如果这样设状态的话,转移方程就会非常一眼(刷表):

\[dp_{t, \min(i + \texttt{sti}, n), \min(j + \texttt{stj}, n)} \gets \dfrac{dp_{t - 1, i, j}}{pq} \]

其中 \(\texttt{sti} \in \{1, 2, \cdots, p\}\),\(\texttt{stj} \in \{1, 2, \cdots q\}\),表示两人的步数。

答案就是 \(\sum\limits_{t=1}^n\sum\limits_{j=b}^n dp_{t, n, j}\),表示某一回合内 Tak 走到 \(n\) 了,那必然算入答案内。

初始化 \(dp_{0, a, b} = 1\)。更多细节参考代码,注意分数用逆元实现。

闲话

时间复杂度 \(O(n^2pq)\)。

题解区写得没我好看的原因是,他们的复杂度是 \(O(n^2(p+q))\) 吧,好像跑得比我快多了。

但是正常机子跑常数极小的 \(10^8\) 级别运算,还是能轻松胜任的(?)所以就过了。不信的话,你拿样例三跑一跑!

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int mod = 998244353;
int qpow(int x, int y = mod - 2)
{
	int ans = 1;
	while (y)
	{
		if (y & 1) ans = 1ll * ans * x % mod;
		x = 1ll * x * x % mod;
		y >>= 1;
	}
	return ans;
}
int dp[105][105][105]; //dp[t][i][j] : 第t回合,Tak在i位置,Aok在j位置,概率 
int main()
{
	int n, a, b, p, q, ans = 0;
	cin >> n >> a >> b >> p >> q;
	int inv = 1ll * qpow(p) * qpow(q) % mod;
	
	dp[0][a][b] = 1;
	for (int t = 1; t <= n; t++)
		for (int i = a; i < n; i++)
			for (int j = b; j < n; j++)
				for (int sti = 1; sti <= p; sti++)
					for (int stj = 1; stj <= q; stj++)
						dp[t][min(n, i + sti)][min(n, j + stj)] = (dp[t][min(n, i + sti)][min(n, j + stj)] + 1ll * inv * dp[t - 1][i][j] % mod) % mod;
	for (int t = 1; t <= n; t++)
			for (int j = b; j <= n; j++)
				ans = (ans + dp[t][n][j]) % mod;
	cout << ans;
	return 0;
}

希望能帮助到大家!

标签:int,题解,texttt,ans,ABC298E,dp,mod
From: https://www.cnblogs.com/liangbowen/p/17342621.html

相关文章

  • [P8766 [蓝桥杯 2021 国 AB] 异或三角]题解
    P8766[蓝桥杯2021国AB]异或三角题目描述分析题目中给出了三个限制首先我们不妨设\(a,b\ltc\),则而由于我们把\(c\)作为了最大值,原题需要有序对\((a,b,c)\)所以\(ans\ast3\)1.\(1\leqa,b,c\leqn\)2.\(a\oplusb\oplusc=0\)3.\(a+b\gtc\)而在枚举过程中,......
  • P1350 车的放置 题解
    一、题目描述:给你一个网格棋盘,a,b,c,d 表示了对应边长度,也就是对应格子数。例如,当a=b=c=d=2时,对应如下面这样一个棋盘:想要在这个棋盘上放 k棋子,也就是这 k 个棋子没有两个在同一行,也没有两个在同一列,问有多少种方案。数据保证 0......
  • [ARC138D] Differ by K bits 题解
    小清新构造题。首先\(K=1\)的情况是trival的,直接格雷码即可。对于\(K>1\),我们发现题目的约束相当于\(\operatorname{popcount}(P_i\oplusP_{(i+1)\bmod2^N})=K\),考虑\(P_i\)的差分序列\(D_i\),那么\(D_i\)一定是一个恰好有\(K\)位\(1\)的二进制数,记\(S=\{i\mid......
  • 团体程序设计天梯赛 L1-064 估值一亿的AI核心代码 题解
    思路L1-064估值一亿的AI核心代码题意有一点不太清晰的,就是原文中的'I',无论是否是单独的,都不能变为小写。如果是单独的'I'再被转化为'you'。这种模拟题就需要每个的分分清清楚楚的,不要都揉到一块儿,容易写错。具体还有些需要注意的在代码里注释着了。代码#include<iostream>......
  • Android Studio Gradle Download 慢/卡问题解决
    build.gradlebuildscript{repositories{//jcenter()//jcenter(){url'http://jcenter.bintray.com/'}maven{url'http://maven.aliyun.com/nexus/content/groups/public/'}maven{url"https://jitpac......
  • 【题解】P4069 [SDOI2016]游戏
    题目描述Alice和Bob在玩一个游戏。游戏在一棵有\(n\)个点的树上进行。最初,每个点上都只有一个数字,那个数字是\(123456789123456789\)。有时,Alice会选择一条从\(s\)到\(t\)的路径,在这条路径上的每一个点上都添加一个数字。对于路径上的一个点\(r\),若\(r\)与\(s\)......
  • 【题解】P5327 [ZJOI2019] 语言
    P5327[ZJOI2019]语言题目描述九条可怜是一个喜欢规律的女孩子。按照规律,第二题应该是一道和数据结构有关的题。在一个遥远的国度,有\(n\)个城市。城市之间有\(n-1\)条双向道路,这些道路保证了任何两个城市之间都能直接或者间接地到达。在上古时代,这\(n\)个城市之间处......
  • Android问题解决:android.os.FileUriExposedException: file:///storage/......Intent.
    文章目录一、遇到问题二、解决问题三、分析问题一、遇到问题---------beginningofcrash2022-12-2720:18:15.01014422-14422/com.lisi.evidence_boxE/AndroidRuntime:FATALEXCEPTION:mainProcess:com.lisi.evidence_box,PID:14422android.os.FileUriExpose......
  • 2022年中国大学生程序设计竞赛女生专场-比赛题解
    比赛链接:Dashboard-2022年中国大学生程序设计竞赛女生专场-CodeforcesA.减肥计划(模拟)模拟,如果队列第一个人体重是最大的了,则这个人的位置不会再变,直接输出即可。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_......
  • CF1797E 线段树 + 倍增 题解
    Preface有趣的一道ds,赛后不看题解做出来了。Solution首先有一个性质:\(\varphi(x)\)经过\(\mathcal{O}(\logx)\)次迭代后变为\(1\)。证明:若\(x\)为奇数,\(\varphi(x)=x\sum_{i=1}^{k}\frac{p_i-1}{p_i}\),\(p_i\)为奇数,所以\(p_i-1\)为偶数,我们就能得到\(\varphi(x)......