15 条题解
-
0
搬运工 (syrth0p1) LV 10 @ 2025-06-16 20:01:36
/* p_b_p_b txdy AThousandSuns txdy Wu_Ren txdy Appleblue17 txdy */ #include <bits/stdc++.h> #define pb push_back #define fst first #define scd second #define mems(a, x) memset((a), (x), sizeof(a)) using namespace std; typedef long long ll; typedef long double ldb; typedef pair<ll, ll> pii; const int maxn = 110; const ldb EPS = 1e-8; int n, m, K; ldb a[maxn][maxn], p[maxn]; char s[maxn]; struct AC { int tot, ch[maxn][15], fail[maxn], idx[maxn]; void insert(char *s, int id) { int p = 0; for (int i = 0; s[i]; ++i) { if (!ch[p][s[i] - 'A']) { ch[p][s[i] - 'A'] = ++tot; } p = ch[p][s[i] - 'A']; } idx[p] = id; } void build() { queue<int> q; for (int i = 0; i < m; ++i) { if (ch[0][i]) { q.push(ch[0][i]); } } while (q.size()) { int u = q.front(); q.pop(); for (int i = 0; i < m; ++i) { if (ch[u][i]) { fail[ch[u][i]] = ch[fail[u]][i]; q.push(ch[u][i]); } else { ch[u][i] = ch[fail[u]][i]; } } } } } ac; void gauss() { for (int i = 0; i <= ac.tot; ++i) { int r = -1; for (int j = i; j <= ac.tot; ++j) { if (fabs(a[i][j]) > EPS) { r = j; break; } } if (r == -1) { continue; } for (int j = i; j <= ac.tot + 1; ++j) { swap(a[i][j], a[r][j]); } for (int j = i + 1; j <= ac.tot + 1; ++j) { a[i][j] /= a[i][i]; } a[i][i] = 1; for (int j = 0; j <= ac.tot; ++j) { if (i == j) { continue; } for (int k = i + 1; k <= ac.tot + 1; ++k) { a[j][k] -= a[j][i] * a[i][k]; } a[j][i] = 0; } } } void solve() { scanf("%d%d%d", &n, &K, &m); for (int i = 0, x, y; i < m; ++i) { scanf("%d%d", &x, &y); p[i] = 1. * x / y; } for (int i = 1; i <= n; ++i) { scanf("%s", s); ac.insert(s, i); } ac.build(); for (int i = 1; i <= n; ++i) { for (int j = 0; j <= ac.tot; ++j) { for (int k = 0; k <= ac.tot + 1; ++k) { a[j][k] = 0; } } for (int u = 0; u <= ac.tot; ++u) { if (ac.idx[u] == i) { a[u][u] = 1; a[u][ac.tot + 1] = 1; } else if (ac.idx[u]) { a[u][u] = 1; a[u][ac.tot + 1] = 0; } else { a[u][u] = 1; for (int j = 0; j < m; ++j) { a[u][ac.ch[u][j]] -= p[j]; } } } gauss(); printf("%.2Lf\n", a[0][ac.tot + 1]); } } int main() { int T = 1; // scanf("%d", &T); while (T--) { solve(); } return 0; }
-
-12009-07-11 14:07:53@
沙茶题,就是懒得编了。
大家稍微注意一下就行了,数据中有一个点是所有人都输,比赛的时候我就这个点WA了.
-
-22009-11-03 17:35:32@
数据出水了。我开始时AC自动机建错了也80!
求神牛n^3的算法,小菜用的是循环到1000求概率和的算法,由于精度要求不高过了。至于更加精确的算法,希望神牛点拨。 -
-22009-08-15 17:49:51@
注意:输出的不是字符串出现的概率,而是每个人的胜率。。。
这里我调了一天啊!!! -
-22009-08-13 23:47:13@
sigma(p(事件)) 当长度越大概率越趋近0,所以直接统计足够长的序列中即可
-
-22009-08-07 08:29:05@
怎样做到n^3?
我只会暴力 -
-22009-07-17 18:52:55@
搞了整整一天的AC自动机。终于被我给A掉了。感谢上帝。。。
-
-22009-07-09 18:15:11@
其实出题人只是不想卡这题的高精度,这个题目有一个N三方的算法。。。
所以这个题还是很厉害滴。。。
-
-22009-07-06 14:32:39@
AC自动机
可是我不会.. -
-22009-07-07 00:27:33@
我要喝沙茶!!!
是不是喝了沙茶这题就会做了~~
我要喝冰红茶~~
这题BT -
-22009-07-05 21:52:38@
沙茶沙茶
-
-22009-07-05 22:05:58@
我要喝沙茶!!!
是不是喝了沙茶这题就会做了~~ -
-22009-07-05 21:00:53@
我是沙茶,当时不会做……
自从这道题后我才会AC自动机…… -
-22009-07-12 21:21:41@
此题终于有人做了...
楼下说的很关键,要加个额外判断。我用楼下大牛程序提交题目时就加了这条语句。 -
-42009-07-06 13:28:03@
沙茶题留名:
傻X许杰奇到此一游!
- 1