题解:P14860 [ICPC 2021 Yokohama R] Cancer DNA
题目传送门
省流:这个
Solution
直接容斥可以
这个在
考虑将
这个东西随机 ? 换成随机的)就行了。
Code
代码里的
signed main() {
// freopen("", "r", stdin);
// freopen("", "w", stdout);
read(m, n);
for (int i = 1; i <= n; ++i) {
read(s[i]); int c = 0;
for (int _ = C; _--; ) {
string t = s[i];
for (char &c : t) if (c == '?') c = "ACGT"[rnd() % 4];
for (int j = 1, k; j < i; ++j) {
for (k = 0; k < m; ++k) if (s[j][k] ^ '?' && s[j][k] ^ t[k]) break;
if (k == m) goto brek;
} ++c;
brek: ;
}
ans += pow(0.25, m - count(s[i].begin(), s[i].end(), '?')) / C * c;
}
cout << ans;
return 0;
}