意甲冠军:

n一定长度m串  隐藏的字符串相等的概率  然后,你猜怎么着玩家隐藏的字符串  的询问字符串的一个位置  再不断的知道一些位置后  游戏者就能够确定藏起来的串是什么  问  游戏者的期望步数

思路:

能够说是一道概率题  也能够说是期望题  总之感觉题目不错…

首先假设我们枚举藏起来的串是哪个(复杂度n)  然后利用状压去dp维护猜某些位的状态的概率  以及对于那个状态剩下哪些串是无法辨别的(复杂度m*2^m)  那么复杂度为 O(nm2^m) 这样就会TLE

接着思考  事实上问题不是出在状压的2^m上(它已经非常优秀了)  既然不去掉状压  那么辅助状态转移的m也扔不掉  我们仅仅能想方法避免那个n  使复杂度达到 O(m2^m)

然后我们来确定方案:

我们用状压的二进制数表示m个位置有哪些位置已经被揭示了  那么我们能够利用dp求出对于每一个状态的概率(或者称为从一位都不揭示到揭示到如今这样的状态的期望)  那么对于如今这样的状态  假设已经能够猜到藏起来的是哪个串  那么我们就不须要再猜了  否则至少要猜下一步  那么这个“下一步”对于整个游戏期望步数的贡献就为dp[状态]*1

如今问题就在  怎样推断这个状态是不是猜完了

事实上这个问题能够用dp打表出  对于已经猜了一些位置后  有哪些串是如今的状态分辨不出来的(代码中的f数组)

那么假设f为0  表示已经猜到了  假设不为0则里面至少有2个1存在  则对于当中的每一个1  假设藏起来的正是1相应的那个串  则还须要1步  那么这1步对答案的贡献就是刚才说的dp[]*1了

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<bitset>
using namespace std;
typedef long long LL;
#define N 55
#define M 25 int n, len;
char str[N][M];
LL f[(1 << 20) + 10], bin[N];
double ans[(1 << 20) + 10];
double res; int main() {
int i, j, k, c;
bin[0] = 1;
for (i = 1; i < N; i++)
bin[i] = (bin[i - 1] << 1);
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%s", str[i]);
len = strlen(str[1]);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i != j) {
int same = 0;
for (k = 0; k < len; k++) {
if (str[i][k] == str[j][k])
same |= bin[k];
}
f[same] |= bin[j];
}
}
}
for (i = bin[len] - 1; i >= 0; i--) {
for (j = 0; j < len; j++) {
if (i & bin[j]) {
f[i ^ bin[j]] |= f[i];
}
}
}
ans[0] = 1;
for (i = 0; i < bin[len]; i++) {
for (c = j = 0; j < len; j++) {
if (i & bin[j])
c++;
}
for (j = 0; j < len; j++) {
if (!(i & bin[j]))
ans[i | bin[j]] += ans[i] / (len - c);
}
for (j = 0; j < n; j++) {
if (f[i] & bin[j])
res += ans[i];
}
}
printf("%.10f\n", res / n);
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

CodeForces 482C Game with Strings的更多相关文章

  1. Codeforces 482C Game with Strings(dp+概率)

    题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,如今从中选定一个字符串为答案串,你不知道答案串是哪个.可是能够通过询问来确定, 每次询问一个位置 ...

  2. Codeforces 385B Bear and Strings

    题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...

  3. 【24.34%】【codeforces 560D】Equivalent Strings

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. CodeForces 682D Alyona and Strings (四维DP)

    Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...

  5. codeforces 518A. Vitaly and Strings

    A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. Codeforces 149 E. Martian Strings

    正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...

  7. Codeforces 985 F - Isomorphic Strings

    F - Isomorphic Strings 思路:字符串hash 对于每一个字母单独hash 对于一段区间,求出每个字母的hash值,然后排序,如果能匹配上,就说明在这段区间存在字母间的一一映射 代 ...

  8. CodeForces - 616F:Expensive Strings (后缀自动机)

    You are given n strings ti. Each string has cost ci. Let's define the function of string , where ps, ...

  9. Codeforces 923 D. Picking Strings

    http://codeforces.com/contest/923/problem/D 题意: A-->BC , B-->AC , C-->AB , AAA-->empty 问 ...

随机推荐

  1. 局部权重线性回归(Locally weighted linear regression)

    在线性回归中,因为对參数个数选择的问题是在问题求解之前已经确定好的,因此參数的个数不能非常好的确定,假设參数个数过少可能拟合度不好,产生欠拟合(underfitting)问题,或者參数过多,使得函数过 ...

  2. extjs在form表单提交成功、故障响应信息

    类别Ext.form.Action.Submit 处理表单Form数据并返回response类对象. 这个类的仅在形式实例Form{@link Ext.form.BasicForm#submit 提交 ...

  3. Android在如何建立一个WebServer

    今天老板交待任务最终完成了,感觉收获颇多,所以写一个关于它的记录,首先,看一下.老板的需求 需求: 希望移动端的用户标识(IMEI)和HTML页面的用户标识(Cookie)连接起来,当中HTML页面可 ...

  4. include设置属性在relativelayout布局中无效

    转自:http://4265337.blog.163.com/blog/static/195375820127935731114/ 再来说一个在使用这两个标签时最容易出现的问题. 经常会有同学在Rel ...

  5. Kruskal(克鲁斯卡尔)

    设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点, 没有边的非 连通图 T={V, E}, 图中每个顶点自成一个连通分量. 当在E中选到一条具有最小权值的边时,若该边的两个顶点落在 ...

  6. linux环境下的线程的创建问题

    pthread_create函数用于创建一个线程 函数原型 #include<pthread.h> int pthread_create(pthread_t *restrict tidp, ...

  7. Oracle错误——ORA-03113:在通信信道文件的末尾 解决方案

    起源 今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误"ORA-01034"和"ORA-27101"如图: 然后就就通过命令提示符去登陆Oracle, ...

  8. MVC 学习 区域

    http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2209438.html

  9. Windows Phone开发(16):样式和控件模板

    原文:Windows Phone开发(16):样式和控件模板 在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的 ...

  10. REDGATE又一好用的脚本工具ScriptsManager1.3

    原文:REDGATE又一好用的脚本工具ScriptsManager1.3 REDGATE又一好用的脚本工具ScriptsManager1.3 先说明一下:这个工具是免费的 下载地址:http://ww ...