意甲冠军:

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. Mac中如何写NTFS的移动硬盘

    Mac中如何写NTFS的移动硬盘 按 照网上的说法,简单的就是购买Paragon NTFS或者Tuxera NTFS之类的收费软件,不想花钱的就用NTFS-3G.作为一个开发人员,既然能够自己解决,当 ...

  2. 我和小美的撸码日记(3)之中的一个句话搞定MVC表单页数据绑定与提交

    另外献上在<线体验Demo地址>希望大家也能从中得到一些启示. 地址:http://121.40.148.178:8080/ . username:guest,password:12345 ...

  3. redhat linux 5上创建本地yum源

    1.挂载光驱 [root@rh5rac1 ~]#mkdir -p /mnt/cdrom [root@rh5rac1 ~]#mount /dev/cdrom /mnt/cdrom 2.将redhat光盘 ...

  4. VC++ 在两个文件互相包含时会出现的错误

    首先,要分别在两个文件中实现以下两个类 class Object { public: NewType ToType(); }; class NewType : public Object { } -- ...

  5. jquery下php与ajax的数据交换方式

    参考链接:http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0122/11971.html 一.前台传递字符串变量,后台返回字符串变量( ...

  6. Netbeans源代码编辑技巧——使用代码补全和代码生成

    原文 Netbeans源代码编辑技巧——使用代码补全和代码生成 使用代码补全生成代码 一般来说,代码补全对于自动填充缺失的代码是有帮助的,例如标识符和关键字.截至 NetBeans IDE 6.0,您 ...

  7. CentOS 如何使用第三方软件库-EPEL与RPMForge、RPMFusion软件库

    在CentOS下运行yum install flash-plugin或yum install mplayer的时候,提示库里没有找到这个软件?为什么会这样?因为CentOS是RHEL编译过来的,去掉了 ...

  8. swift 进阶笔记 (一) —— 可选型

    swift定义可选型的时候,要用"?",可是在swift的标准库中,可选型的定义是Optional<T>,"? "仅仅是个简写形式. var myN ...

  9. FREESWITCH SEESION

    SESSION SESSION为FS的核心概念之一,所以需要拿出来专门的分析下. 从以下几个方面进行分析,结构类型,资源的管理,对于呼叫的意义,规格. 1.结构类型 每一次呼叫会申请一个session ...

  10. Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

    Oracle 数据库可以实现数据库不完全恢复与完全恢复.完全恢复是将数据库恢复到最新时刻,也就是无损恢复,保证数据库无丢失的恢复.而不完全恢复则是根据需要特意将数据库恢复到某个过去的特定时间点或特定的 ...