题面

板板的生成函数做法太神仙了,我跑了

朴素的做法是建立AC自动机变成图上的随机游走问题

来仔细考虑一下转移,把状态分成非结尾状态和结尾状态。在一个非结尾状态后补一个串是一定能到达目标串的,但是如果中间出现了前缀等于后缀的情况也可能直接转移到另一个结尾状态。那么我们就用KMP把串之间两两的前缀=后缀的情况状态统计起来列方程,设$x_i$表示$i$胜利的概率,$p[i][j]$表示第$i$个串第一个出现之后又接了一个后缀转移到第$j$个串的概率

那么对于每个$i$有$x_i+\sum\limits_{j=1}^np[i][j]x_j=\frac{1}{2^m}$,后面那个就是正好拼出来的概率

我们发现好像少了点什么东西,方程并不能够解出来,所以挖掘一下没用到的条件:$\sum\limits_{i=1}^nx_i=1$,然后就行了

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define double long double
using namespace std;
const int N=;
const double eps=1e-;
double pw[N],equ[N][N];
int n,m,nxt[N][N]; char str[N][N];
double Calc(int a,int b)
{
double ret=; int o=;
for(int i=;i<m;o+=str[b][i]==str[a][o],i++)
while(o&&str[b][i]!=str[a][o]) o=nxt[a][o];
if(a==b) o=nxt[a][o];
while(o) ret+=pw[m-o],o=nxt[a][o];
return ret;
}
void Guass()
{
for(int i=;i<=n;i++)
{
int tmp=i;
for(int j=i+;j<=n;j++)
if(fabs(equ[j][i])>fabs(equ[tmp][i])) tmp=j;
for(int j=i;j<=n+;j++)
swap(equ[i][j],equ[tmp][j]);
for(int j=;j<=n;j++)
if(i!=j)
{
double tep=equ[j][i]/equ[i][i];
for(int k=i;k<=n+;k++)
equ[j][k]-=tep*equ[i][k];
}
}
for(int i=;i<=n;i++) equ[i][n+]/=equ[i][i],equ[i][i]=;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%s",str[i]);
for(int j=,o=;j<m;j++)
{
while(o&&str[i][o]!=str[i][j]) o=nxt[i][o];
nxt[i][j+]=(str[i][o]==str[i][j])?++o:;
}
}
pw[]=;
for(int i=;i<=;i++) pw[i]=pw[i-]*0.5;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
equ[i][j]=Calc(i,j);
for(int i=;i<=n;i++)
equ[i][n+]=-pw[m],equ[i][i]+=;
for(int i=;i<=n;i++) equ[n+][i]=;
// for(int i=1;i<=n;puts(""),i++)
// for(int j=1;j<=n+1;j++) printf("%.2Lf ",equ[i][j])
n++,equ[n][n+]=,Guass();
for(int i=;i<n;i++) printf("%.10Lf\n",equ[i][n+]);
return ;
}

解题:SDOI 2017 硬币游戏的更多相关文章

  1. 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2017 这题太神了,我想了一个中午啊 原来是看错题一直没理解题解说的,一直以为题解是错的QAQ “开始 ...

  2. SDOI 2017 Round1 解题报告

    Day 1 T1 数字表格 题目大意 · 求\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mFibonacci(\gcd(i,j))\),\(T\leq1000\) ...

  3. bzoj 2017 [Usaco2009 Nov]硬币游戏 动态规划

    [Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 431  Solved: 240[Submit][Status] ...

  4. 【题解】Luogu p2964 BZOJ 2017[Usaco2009 Nov]硬币游戏

    题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...

  5. TYVJ P1075 硬币游戏 Label:dp

    背景 农民John的牛喜欢玩硬币,所以John就为它们发明了一个新的两人硬币游戏,叫做Xoinc. 描述 最初地面上有一堆n个硬币(5<=n<=2000),从上面数第i个硬币的价值为C_i ...

  6. tyvj P1075 - 硬币游戏 博弈DP

    P1075 - 硬币游戏 From price    Normal (OI)总时限:10s    内存限制:128MB    代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...

  7. 1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏

    1289 大鱼吃小鱼 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右 ...

  8. 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉

    产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...

  9. 腾讯WeTest发布《2017中国移动游戏质量白皮书》,专注手游品质提升

    1月8日,腾讯质量开放平台WeTest正式发布<2017中国移动游戏质量白皮书>. 刚刚过去的这一年,市场逐渐成熟,中国移动互联网由增量市场转向存量市场.中国移动游戏市场急剧变化,真正的精 ...

随机推荐

  1. 20155226 《网络攻防》 Exp1 PC平台逆向破解(5)M

    20155226 <网络攻防> Exp1 PC平台逆向破解(5)M 实践目标 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 该程序同时包含另一个代 ...

  2. 【WPF】给TextBox添上Label

    原文:[WPF]给TextBox添上Label 引言     在客户端开发中,要说出现频率大的控件,必定有TextBox的身影.然而在TextBox的旁边通常得有个基友Label,形影不离.为此,我们 ...

  3. 蒙特卡罗方法 python 实现

    蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值. 一.求圆周率的近似值,采用 投点法 import numpy as np import matplotli ...

  4. python3获取文件及文件夹大小

    获取文件大小 os.path.getsize(file_path):file_path为文件路径 >>> import os >>> os.path.getsize ...

  5. Windows 10无法使用debug的解决方案

    在学习汇编语言的时候,XP系统或者更早版本的默认在Dos命令下敲入debug即可进入汇编指令模式下,而在Windows 7及更高版本下,这些功能似乎都被阉割了,所以今天我们讲带大家处理一下如何解决这个 ...

  6. Unity程序协同问题,传送时屏幕变黑变亮的解决,常规操作的行为集合

    在unity中运行某段程序时往往需要运行另外一段不相干但是却对功能上有需求的程序,比如进行场景传送,在传送点处,点击I键,屏幕慢慢变黑,场景传送到另外一个场景,场景又慢慢变亮.这里首先涉及两个物体,一 ...

  7. B1014. 福尔摩斯的约会

    14/20 #include<bits/stdc++.h> using namespace std; map<char,string> day; int main(){ day ...

  8. 小刘的机器学习---SVM

    前言: 这是一篇记录小刘学习机器学习过程的随笔. 正文: 支持向量机(SVM)是一组用于分类, 回归和异常值检测的监督学习方法. 在分类问题中,SVM就是要找到一个同时离各个类别尽可能远的决策边界即最 ...

  9. PowerDesigner数据库设计实用技巧

    欢迎大家补充,谢谢! 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的 ...

  10. one team

    Double H Team 1.队员 王熙航211606379(队长) 李冠锐211606364 曾磊鑫211606350 戴俊涵211606359 聂寒冰211606324 杨艺勇211606342 ...