Solution -「SDOI 2017」「洛谷 P3706」硬币游戏
Link.
给定 个长度为 且两两不同的字符串 , 字符集 . 各位置独立在 中均匀随机, 生成一个足够长的字符串 , 对于每个 , 求 在 中第一次出现位置最靠前的概率.
.
感觉一直知道 PGF 但基本没有上手用过 qwq.
比较套路啦, 令 表示 出现位置最靠前时, 其概率关于 的 PGF; 表示没有任何 出现时, 其概率关于 的 PGF. 我们的目标是求所有 .
" 被放出来的概率" = " 时没有结束的概率":
"从一个未结束状态向后再恰好延伸出一个 的概率" = "在放的过程中所有戛然而止 (某个 出现了) 的时候再向后强行补满未出现字符的概率":
一起令 :
直接对总共 个变量消元即可. 复杂度 .
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
typedef unsigned long long ULL;
const int MAXN = 300;
const ULL BASE = 127;
int n, m;
ULL hpw[MAXN + 5], hsh[MAXN + 5][MAXN + 5];
double mat[MAXN + 5][MAXN + 5], pwr[MAXN + 5], ans[MAXN + 5];
inline void init() {
hpw[0] = 1;
rep (i, 1, m) hpw[i] = hpw[i - 1] * BASE;
pwr[0] = 1;
rep (i, 1, m) pwr[i] = 0.5 * pwr[i - 1];
}
inline ULL calc(const int i, const int l, const int r) {
return hsh[i][r] - hpw[r - l + 1] * hsh[i][l - 1];
}
inline void gauss() {
rep (i, 0, n) {
int p = i;
rep (j, i + 1, n) if (fabs(mat[p][i]) < fabs(mat[j][i])) p = j;
if (i != p) std::swap(mat[p], mat[i]);
rep (j, i + 1, n) {
double t = mat[j][i] / mat[i][i];
rep (k, i, n + 1) mat[j][k] -= t * mat[i][k];
}
}
per (i, n, 0) {
ans[i] = mat[i][n + 1] / mat[i][i];
rep (j, 0, i - 1) mat[j][n + 1] -= ans[i] * mat[j][i];
}
}
int main() {
scanf("%d %d", &n, &m), init();
rep (i, 1, n) {
static char str[MAXN + 5];
scanf("%s", str + 1);
rep (j, 1, m) hsh[i][j] = hsh[i][j - 1] * BASE + str[j];
}
rep (i, 1, n) {
mat[i][0] = -pwr[m];
rep (j, 1, n) {
rep (k, 1, m) if (calc(i, 1, k) == calc(j, m - k + 1, m)) {
// printf("%d %d %d\n", i, j, k);
mat[i][j] += pwr[m - k];
}
}
}
rep (i, 1, n + 1) mat[0][i] = 1.;
gauss();
rep (i, 1, n) printf("%.12f\n", ans[i]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-10-07 Solution -「多校联训」签到题
2021-10-07 Solution -「多校联训」朝鲜时蔬
2020-10-07 Solution -「LOCAL」客星璀璨之夜
2020-10-07 Solution -「LOCAL」割海成路之日