传送门

感觉这题难点在读懂题。

题目简述:给你一个字符串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)的更多相关文章

  1. CodeForces 24D Broken robot (概率DP)

    D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. CodeForces 931E Game with String

    Game with String 题意:有一个字符串,可以选择从第K位开始,将[K,len(s)-1]的字符都移到前面去,现在给你一个首字母,你可以再选择一位进行观察,然后猜测这个K的值是多少, 现在 ...

  3. codeforces 710E Generate a String(简单dp)

    传送门:http://codeforces.com/problemset/problem/710/E 分析: 让你写一个全由"a"组成的长为n的串,告诉你两种操作,第一种:插入一个 ...

  4. CodeForces - 710E Generate a String (dp)

    题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...

  5. CodeForces 148D-Bag of mice(概率dp)

    题意: 袋子里有w个白球b个黑球,现在两个人轮流每次取一个球(不放回),先取到白球的获胜,当后手取走一个球时,袋子里的球会随机的漏掉一个,问先手获胜的概率. 分析: dp[i][j]表示袋子中i个白球 ...

  6. Codeforces 148D Bag of mice 概率dp(水

    题目链接:http://codeforces.com/problemset/problem/148/D 题意: 原来袋子里有w仅仅白鼠和b仅仅黑鼠 龙和王妃轮流从袋子里抓老鼠. 谁先抓到白色老师谁就赢 ...

  7. 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 ...

  8. Codeforces 513G1 513G2 Inversions problem [概率dp]

    转自九野:http://blog.csdn.net/qq574857122/article/details/43643135 题目链接:点击打开链接 题意: 给定n ,k 下面n个数表示有一个n的排列 ...

  9. Codeforces #28 C.Bath Queue (概率dp)

    Codeforces Beta Round #28 (Codeforces format) 题目链接: http://codeforces.com/contest/28/problem/C 题意: 有 ...

随机推荐

  1. Cookie 和Session 简介

    前言 HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题.不然有些情况下即使是同一个网站每打开一个页面也都要登录一下.而Session和Cookie就是为解决这个问题而提出来的两 ...

  2. 160. Intersection of Two Linked Lists (List;Two-Pointers)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  3. 十个前端UI优秀框架

    最近需要一些前端框架,于是在网上整理了一些感觉不错的前端框架,有pc端和移动端,为了方便日后自己先记录下来了... Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( ...

  4. c中堆栈的理解

    一直对堆栈的使用以及全局变量.静态全局变量.局部变量.静态局部变量.初始化的全局变量.未初始化的全局变量.初始化的局部变量.未初始化的局部变量理解的不是很清楚,今天抽个时间来总结以下这方面的知识: 1 ...

  5. 微信小程序开发——开发者工具中素材管理功能使用的注意事项

    为什么使用“素材管理”: 微信小程序环境中本地资源图片是无法通过 WXSS 获取的,可以使用网络图片,或者 base64,或者使用<image/>标签.. 当然,如果不想这么麻烦,你可能会 ...

  6. RTP格式解析

    一般为12字节,16字节头(转自https://www.cnblogs.com/qingquan/archive/2011/07/28/2120440.html) 概述: 实时传送协议(Real-ti ...

  7. VS PDB文件

    转 PDB文件 PDB(Program Data Base),意即程序的基本数据,是VS编译链接时生成的文件.DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名.变量名.函数名.FP ...

  8. swift - label字体 倾斜,加粗

    /* label.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];//加粗 label.font = [UIFont ...

  9. vue项目网站换肤

    由于我网站不是的单色,换动的样式有点多,所以我只能通过后端传给我的不同的皮肤类型,来控制不同的样式文件 在网上查了一堆,每一个有用的 if(store.getters.infoType==1){ re ...

  10. c# Parallel.For 并行编程 执行顺序测试

    因为有个for 实际执行结果尽管是按照for里边的顺序执行,但处理器让哪个分线程先执行,谁先处理完就不一定了. 对于要求结果需要先后顺序的,比如对text内容的操作, 用并行 Parallel.For ...