解题:SDOI 2017 硬币游戏
板板的生成函数做法太神仙了,我跑了
朴素的做法是建立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 硬币游戏的更多相关文章
- 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)
http://www.lydsy.com/JudgeOnline/problem.php?id=2017 这题太神了,我想了一个中午啊 原来是看错题一直没理解题解说的,一直以为题解是错的QAQ “开始 ...
- SDOI 2017 Round1 解题报告
Day 1 T1 数字表格 题目大意 · 求\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mFibonacci(\gcd(i,j))\),\(T\leq1000\) ...
- bzoj 2017 [Usaco2009 Nov]硬币游戏 动态规划
[Usaco2009 Nov]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 431 Solved: 240[Submit][Status] ...
- 【题解】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 ...
- TYVJ P1075 硬币游戏 Label:dp
背景 农民John的牛喜欢玩硬币,所以John就为它们发明了一个新的两人硬币游戏,叫做Xoinc. 描述 最初地面上有一堆n个硬币(5<=n<=2000),从上面数第i个硬币的价值为C_i ...
- tyvj P1075 - 硬币游戏 博弈DP
P1075 - 硬币游戏 From price Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 农民John的牛喜欢玩 ...
- 1289 大鱼吃小鱼 1305 Pairwise Sum and Divide 1344 走格子 1347 旋转字符串 1381 硬币游戏
1289 大鱼吃小鱼 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右 ...
- 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉
产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...
- 腾讯WeTest发布《2017中国移动游戏质量白皮书》,专注手游品质提升
1月8日,腾讯质量开放平台WeTest正式发布<2017中国移动游戏质量白皮书>. 刚刚过去的这一年,市场逐渐成熟,中国移动互联网由增量市场转向存量市场.中国移动游戏市场急剧变化,真正的精 ...
随机推荐
- Metasploit简单应用
什么是Metasploit Metasploit是一款开源的安全漏洞检测工具. 它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报.当我们第一次接触Me ...
- 20155320 Exp7 网络欺诈防范
20155320 Exp7 网络欺诈防范 [基础问题回答] (1)通常在什么场景下容易受到DNS spoof攻击 乱点链接或者连公共场合的免费WiFi也容易受到攻击,尤其是那种不需要输入密码直接就可以 ...
- mfc CProgressCtrl
CProgressCtrl常用属性 CProgressCtrl类常用成员函数 CProgressCtrl代码示例 一.CProgressCtrl控件属性 当我们在处理大程序时,常常需要耗很长时间(比如 ...
- 洛咕 P4474 王者之剑
宝石只能在偶数秒取到,假设有一个宝石在奇数秒取到了,那么上一秒是偶数秒,在上一秒的时候这里的宝石就没了. 相邻的两个宝石不能同时取,很显然,先取一块,那么这是偶数秒,取完了这一块之后相邻的都没了. 只 ...
- 您需要来自XXX的权限才能对此文件夹进行更改
解决办法: cmd命令:del/f/s/q 文件夹
- PowerBI开发 第十三篇:增量刷新
PowerBI 将要解锁增量刷新(Incremental refresh)功能,这是一个令人期待的更新,使得PowerBI可以加载大数据集,并能减少数据的刷新时间和资源消耗,该功能目前处于预览状态,只 ...
- Vxlan抓包
实验目的:验证Openstack vxlan组网模式验证虚拟机数据是否通过物理网卡流出 一. 同网段不同主机间虚拟机通讯 (同网段通讯直接通过物理机隧道口链接对端物理机隧道口,不需要通过网络节点): ...
- tomcat设置开机自启动和后台运行
前言:当浏览器页面显示不出来的时候,重启装在服务器上的tomcat可以正常使用,是通过进入tomcat的bin目录,双击startup.bat运行启动的程序,这时会弹出启动窗口(tomcat的运行日志 ...
- Hexo初体验
title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...
- Selenium--数据驱动(python)
前言: 什么是数据驱动? 从它的本意来解释,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.说人话,其实就是参数化. 本次介绍2种文件驱动:ini文件和yaml文件 一.ini文件 1 ...