2018.12.12 codeforces 931E. Game with String(概率dp)
传送门
感觉这题难点在读懂题。
题目简述:给你一个字符串s,设将其向左平移k个单位之后的字符串为t,现在告诉你t的第一个字符,然后你可以另外得知t的任意一个字符,求用最优策略猜对k的概率。
解析:
预处理出一个数组cnti,j,kcnt_{i,j,k}cnti,j,k表示一段字串开头为iii,结尾为jjj,字串长度为k+1k+1k+1的字串数量。
然后如果cnti,j,k=1cnt_{i,j,k}=1cnti,j,k=1说明如果给出的开头是iii,并且第k+1k+1k+1个是jjj的话就一定能猜对。
所以对于每一个开头为iii的,字串长度为kkk的,如果有lll个jjj满足cnti,j,k=1cnt_{i,j,k}=1cnti,j,k=1说明如果我们问第k+1k+1k+1个字母是什么有l/26l/26l/26的概率猜对。
所以对于每一种开头枚举所有的kkk求出概率的最大值,加起来就是答案。
总概率等于26∗(∑li26)∗1n=∑lin26*(\sum\frac{l_i}{26})*\frac1 n=\sum\frac{l_i}n26∗(∑26li)∗n1=∑nli
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=5e3+5,S=26;
int cnt[S][S][N],n;
char s[N];
int main(){
scanf("%s",s+1),n=strlen(s+1);
for(ri i=1;i<=n;++i)for(ri j=1;j<n;++j)++cnt[s[i]-'a'][s[i+j>n?i+j-n:i+j]-'a'][j];
double ans=0.0;
for(ri i=0,mx=0;i<26;++i,mx=0){
for(ri tmp=0,j=1;j<=n;++j,tmp=0){
for(ri k=0;k<26;++k)if(cnt[i][k][j]==1)++tmp;
mx=max(mx,tmp);
}
ans+=1.0*mx/n;
}
printf("%.15lf",ans);
return 0;
}
2018.12.12 codeforces 931E. Game with String(概率dp)的更多相关文章
- CodeForces 24D Broken robot (概率DP)
D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- CodeForces 931E Game with String
Game with String 题意:有一个字符串,可以选择从第K位开始,将[K,len(s)-1]的字符都移到前面去,现在给你一个首字母,你可以再选择一位进行观察,然后猜测这个K的值是多少, 现在 ...
- codeforces 710E Generate a String(简单dp)
传送门:http://codeforces.com/problemset/problem/710/E 分析: 让你写一个全由"a"组成的长为n的串,告诉你两种操作,第一种:插入一个 ...
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...
- CodeForces 148D-Bag of mice(概率dp)
题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球 ...
- Codeforces 148D Bag of mice 概率dp(水
题目链接:http://codeforces.com/problemset/problem/148/D 题意: 原来袋子里有w仅仅白鼠和b仅仅黑鼠 龙和王妃轮流从袋子里抓老鼠. 谁先抓到白色老师谁就赢 ...
- CodeForces 499D. Name That Tune(概率dp)
It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the followi ...
- Codeforces 513G1 513G2 Inversions problem [概率dp]
转自九野:http://blog.csdn.net/qq574857122/article/details/43643135 题目链接:点击打开链接 题意: 给定n ,k 下面n个数表示有一个n的排列 ...
- Codeforces #28 C.Bath Queue (概率dp)
Codeforces Beta Round #28 (Codeforces format) 题目链接: http://codeforces.com/contest/28/problem/C 题意: 有 ...
随机推荐
- POJ-1458.CommonSubsequence.(DP:最长公共子序列裸题)
本题大意:给出两个字符串,让你求出最长公共子序列的长度并输出. 本题思路:本题是经典的DP问题,由于是两个字符串,那么我们就用一个二维数组来进行区分,用dp[ i ][ j ]来表示在s1和s2中分别 ...
- 使用phpStudy运行伊人集项目
1.首次运行时,需要把system/config/install.look.php以及system/config/database.php(后面这个文件可以先不删除,若是安装过程中数据库报错,再来删除 ...
- Linux下的crontab定时执行任务详解
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“cr ...
- linux ubuntu设置root用户初始密码
输入 sudo passwd 命令,输入一般用户密码并设定root用户密码. 设定root密码成功后,输入 su 命令,并输入刚才设定的root密码,就可以切换成root了. 提示符$代表一般用户,提 ...
- 线特征---EDLines原理(六)
参考文献:EDLines: A real-time line segment detector with a false detection control ----Cuneyt Akinlar , ...
- 认识Thymeleaf:简单表达式和标签 基础信息
转载:https://www.cnblogs.com/beyrl-blog/p/6633182.html 本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的 ...
- Numpy array分割
1.纵向分割 >>> import numpy as np >>> A = np.arange(12).reshape((3, 4)) >>> p ...
- “Interrupted by header callback: Server reports Content-Length”如何解决
mock初始化时的错误信息如下: Downloading Packages: [SKIPPED] systemd--.fc25.x86_64.rpm: Already downloaded [SKIP ...
- BZOJ1833或洛谷2602 [ZJOI2010]数字计数
BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之 ...
- POJ 2014.K-th Number 区间第k小 (归并树)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 57543 Accepted: 19893 Ca ...