解题: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中国移动游戏质量白皮书>. 刚刚过去的这一年,市场逐渐成熟,中国移动互联网由增量市场转向存量市场.中国移动游戏市场急剧变化,真正的精 ...
随机推荐
- Android Studio com.android.support:percent 导入错误 - 转
看第一行代码(第二版的)书,讲了一个关于PercentFrameLayout和PercentRelativeLayout的部分,书上在build.gradle中导入了com.android.suppo ...
- Tomcat 动态数据库连接池
package com.boguan.bte.util; import java.sql.Connection;import java.sql.SQLException;import java.uti ...
- Educational Codeforces Round 41 (Rated for Div. 2)(A~D)
由于之前打过了这场比赛的E题,而后面两道题太难,所以就手速半个多小时A了前4题. 就当练手速吧,不过今天除了C题数组开小了以外都是1A A Tetris 题意的抽象解释可以在Luogu里看一下(话说现 ...
- arm学习——有关位操作的总结
在学习arm的过程中,感觉寄存器,基本不会提供位操作,而是整体的操作, 整体操作的就是要注意在对某位赋值的时候不要影响到其他位,看上去不简单, 其实,整体操作有技巧, 那么就来总结一下: 1.首先要理 ...
- Linux中tty、pty、pts的概念区别 转载
基本概念: > tty(终端设备的统称): tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西 ...
- libgdx相关知识点
Gdx.graphics.setContinuousRendering(false); 设置图像为非连续自动渲染. 设置Opengl的混合模式,支持alpha属性 Gdx.gl.glBlendFunc ...
- Selenium+Python自动化测试环境搭建和搭建过程遇到的问题解决
环境搭建: 第一步:安装Python 网址:https://www.python.org/ 按照如图提示安装,并且配置环境变量(安装时候选中pip会自动安装Python的包管理工具 pip,推荐选择 ...
- 20135202闫佳歆--week3 课本1-2章学习笔记
第一章 Linux内核简介 一.Unix Unix是一个强大.健壮和稳定的操作系统. 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open ...
- postman 学习网址
postman使用详解: http://gold.xitu.io/entry/57597a62a341310061337885 https://www.getpostman.com/docs/writ ...
- Spring之配置文件中引入其它配置文件
<beans> ... <!--引入其它配置文件--> <import resource="classpath:com/helloworld/beans.xml ...