字符串函数 (strfun)

题目描述

两个等长的由大写英文字母构成的字符串a和b,从a中选择连续子串x,从b中选出连续子串y。子串x与子串y的长度相等。

定义函数f(x,y)为满足条件xi=yi(1<=i<=|x|)的i的个数,计算f(x,y)的数学期望。

输入

第一行输入n(1<=n<=2*10^5),表示a和b的长度

第二行输入字符串a

第三行输入字符串b

输出

输出一个实数表示f(x,y)的期望,答案保留6位小数。

提示

【样例解释】

考虑第一个样例,x,y的选择有5种情况分别是("A","B"),("A","A"),("B","B"),("B","A"),("AB","BA")其中,第2对和第3对所对应的f(x,y)等于1,其他都是0,由于选择每一对的概率都是1/5,所以f(x,y)的期望为1/5*0+1/5*1+1/5*1+1/5*0+1/5*0=2/5=0.4


solution

上面的一个A(位置为i)与下面的一个A(位置为j)

贡献为min(i,j)*min(n-i+1,n-j+1)

例如

xxAxxxx

xxxAxxx

贡献为min(3,4)*min(4,5)=3*4=12

考虑算答案

把对于每一个字符,把A串前缀和起来,同理也做一遍后缀和

扫一遍B串统计即可

比如上面那个例子

A串的前缀0033333

A串的后缀5550000(暂时没有用到)

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define maxn 200005
using namespace std;
int n;
double sl[maxn][27],sr[maxn][27],ans;
char a[maxn],b[maxn];
int main()
{cin>>n;scanf("%s",a+1);scanf("%s",b+1);for(int i=1;i<=n;i++){int t=a[i]-'A'+1;for(int j=1;j<=26;j++)sl[i][j]+=(ll)sl[i-1][j];sl[i][t]+=i;}for(int i=n;i>=1;i--){int t=a[i]-'A'+1;for(int j=1;j<=26;j++)sr[i][j]+=(ll)sr[i+1][j];sr[i][t]+=n-i+1;}for(int i=1;i<=n;i++){int t=b[i]-'A'+1;double s1=sl[i][t]*(ll)(n-i+1),s2=sr[i+1][t]*(ll)i;ans=ans+s1+s2;}double aa=((double)ans*6.0)/(double)n/(double)(n+1)/(double)(2*n+1);printf("%.6lf\n",aa);return 0;
}

转载于:https://www.cnblogs.com/liankewei/p/10358807.html

字符串函数 (strfun)相关推荐

  1. MySQL 学习笔记(3)— 字符串函数、数值函数、日期时间函数、流程函数、聚集函数以及分组数据

    1. 字符串函数 MySQL 的常用函数包括字符串函数.数值函数.日期时间函数.流程函数等. SELECT ascii("abc"),char(97),concat("h ...

  2. c语言中存储字符用什么函数,那些C语言中你不知道的字符串函数(坑)

    1.strcpy() 在字符串拷贝函数中,它的函数编写不难,如下 char* Strcpy(char* dest, const char* src) { assert(dest != NULL &am ...

  3. c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  4. 模拟实现常用字符串函数

    1.查找子字符串函数strstr的实现char * my_strstr(const char * dest, const char * src)//const保护字符串不被更改 {assert(des ...

  5. PHP替换字符串函数strtr()和str_replace()

    strtr(string,from,to): 逐个字符开始替换,以from跟to中长度较较短的一个为准,例如: strtr("aidenliu","ai",&q ...

  6. [SqlServer]数据库中自定义拆分字符串函数Split()

     经常我们要用到批量操作时都会用到字符串的拆分,郁闷的是SQL Server中却没有自带Split函数,所以我们只能自己动手来解决一下.为了减少和数据库的通讯次数,我们都会利用这种方法来实现批量操作. ...

  7. (基础篇)PHP字符串函数

    1查找字符位置函数:   strpos($str,search,[int]):查找search在$str中的第一次位置从int开始: stripos($str,search,[int]):函数返回字符 ...

  8. 字符串函数用法 php,PHP字符串函数print()的用法

    print (PHP 4, PHP 5) print - 输出字符串 说明 int print ( string $arg ) 输出 arg. print 实际上不是一个函数(它是一个语言结构),因此 ...

  9. php字符串加密解密源码,PHP中加密解密字符串函数源代码

    PHP中加密解密字符串函数源代码: /** *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ / ...

  10. 【 C 】字符串函数专题

    目录 字符串基础 字符串长度 不受限制的字符串函数 复制字符串 连接字符串 函数的返回值 字符串比较 长度受限的字符串函数 strncpy strncat strncmp 字符串基础 字符串就是一串零 ...

最新文章

  1. 使用LaTeX排版如何方便地引用多篇参考文献(不使用插件)
  2. C# 获取指定目录下所有文件信息、移动目录、拷贝目录
  3. 面试官:你能说说MyBatis拦截器原理吗?
  4. 算法分析与设计之多处最优服务次序问题2
  5. linux文件和目录基本管理系统,Linux文件基本操作管理和系统目录结构
  6. js中apply和Math.max()函数的问题?
  7. Tomcat正常启动,可以访问其主页,却不能访问webapp中的项目的jsp文件
  8. 004,配置文件详解:Properties和YAML
  9. 《销售从被拒绝开始》叶冠1
  10. 使用springfox 集成swagger 与spring mvc
  11. 微软公布 Windows Phone 8 多项新特性
  12. Java常用类StringBuffer详解
  13. border-box
  14. linux 内核高端内存意义,Linux内核高端内存管理
  15. java生成随机数方法
  16. DDR内存家族演进史
  17. 深度神经网络如何训练,深度神经网络怎么用
  18. 遥感科普|中国高分系列卫星综述(2020版)
  19. 利用NATAPP隧道解决微信公众号开发之本地调试难题
  20. 使用nslookup命令检查DNS服务

热门文章

  1. linux查看硬盘分区类型,linux 下查看硬盘分区类型
  2. oracle11整库迁移,Oracle11.2数据库迁移总结
  3. 没想到,这么简单的线程池用法,深藏这么多坑!
  4. golang 编译 执行时候报错cannot declare name db.Query
  5. Android 控件 之 Adapter 基础讲解
  6. linux怎么db2命令窗口,Linux 命令行进入DB2
  7. 幂次方计算_收藏!机考计算器用法汇总,算题速度提高几倍
  8. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_08-CMS需求分析-CMS页面管理需求...
  9. codeforces 711A A. Bus to Udayland(水题)
  10. centos7 下安装生物信息软件的问题小总结