传送门

感觉这题难点在读懂题。

题目简述:给你一个字符串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. Nginx搭建正向代理服务器

    配置如下: server { listen 8888;                                                   #监听端口 location / { res ...

  2. Angular之响应式表单 ( Reactive Forms )

    项目结构 一 首页 ( index.html ) <!doctype html> <html lang="en"> <head> <met ...

  3. ECMAScript6的原型

    class Car { constructor(name){ this.name = name; } getName(){ } } class Ferrari extends Car{ constru ...

  4. Watcher、ZK状态、事件类型 ,权限

    zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher. 同样,其watcher是监听数据发送了某些变化,那就一定 ...

  5. UVa 536 Tree Recovery(二叉树后序遍历)

    Little Valentine liked playing with binary trees very much. Her favorite game was constructing rando ...

  6. 项目总结06:Java Excel文件导入功能HSSFWorkbook(xls)和 XSSFWorkbook (xlsx)

    项目中碰到Excel文件打入数据功能Mark一下 package com.blue.pem.client.util; import java.io.File; import java.io.FileI ...

  7. DBCO

    实现SAP连接外部数据库 也可用SM30维护DBCON的内容 SAP提供了对原生sql的操作,主要有以下几个类组成: CL_SQL_STATEMENT - Execution of SQL State ...

  8. java NIO Buffer 详解(1)

    1.java.io  最为核心的概念是流(stream),面向流的编程,要么输入流要么输出流,二者不可兼具: 2.java.nio 中拥有3个核心概念: Selector Channel, Buffe ...

  9. rbac 表结构的。设计

    1. 问:为什么程序需要权限控制? 答:生活中的权限限制,① 看灾难片电影<2012>中富人和权贵有权登上诺亚方舟,穷苦老百姓只有等着灾难的来临:② 屌丝们,有没有想过为什么那些长得漂亮身 ...

  10. 配置go语言编辑环境 - goland

    快捷键: 移动行 Alt + Shift + up/down 行内(选中)移动(到头尾/删除) Ctrl(Shift) + left/rignt(Home/End/Backspace) 插入新行 Sh ...