当前位置: 首页 > news >正文

[CodeForces-759D]Bacterial Melee

题目大意:
  有一串n个字母,每个位置的字母可以同化边上的一个字母,
  比如:ab可以变成aa或者bb。
  相对的两个同化不能同时发生,比如ab不能变成ba。
  现在给你一个字符串,问你经过任意次数的同化过程,最多能生成多少个字符串。

思路:
  考虑同化过后的字符串与同化前的字符串的关系。
  如果我们把一个字符串中相邻且相同的字母缩在一起,那么我们可以发现每一次同化就相当于从原串中去掉了一个字符。
  这也就意味着同化过后的串一定是原串的一个子序列。
  同样,如果一个串是原串的一个子序列,它一定能由原串同化而来。
  我们可以先统计一下原串不同长度子序列的个数。
  对于一个长度为l的子序列,它里面有n-l个字符被缩过,那么缩之前的串总共有C(n,l)种可能。
  不同的子序列数量可以用DP求出来。
  f[i][j]表示以字符j结尾的长度为i的子序列数量,则f[i][j]=sum{f[i-1][k]|k≠j}+1,枚举i,j,k,时间复杂度O(n^2*26)。
  如果直接枚举k会TLE,只能过11个点,我们可以考虑用sum[i]记录长度为i的子串的数量和。
  由于结尾位置的字符已确定,所以组合数用C(n-1,l-1)算,时间复杂度O(n^2)。

 1 #include<cstdio>
 2 #include<cctype>
 3 typedef long long int64;
 4 inline int getint() {
 5     register char ch;
 6     while(!isdigit(ch=getchar()));
 7     register int x=ch^'0';
 8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
 9     return x; 
10 }
11 const int N=5001,SIGMA=27,mod=1e9+7;
12 char s[N];
13 int f[N][SIGMA],sum[N],fact[N],factinv[N];
14 inline int idx(const char &ch) {
15     return ch-'a'+1;
16 }
17 void exgcd(const int &a,const int &b,int &x,int &y) {
18     if(!b) {
19         x=1;
20         y=0;
21         return;
22     }
23     exgcd(b,a%b,y,x);
24     y-=a/b*x;
25 }
26 inline int inv(const int &x) {
27     int ret,tmp;
28     exgcd(x,mod,ret,tmp);
29     return (ret%mod+mod)%mod;
30 }
31 inline int C(const int &n,const int &m) {
32     return (int64)fact[n]*factinv[n-m]%mod*factinv[m]%mod;
33 }
34 int main() {
35     const int n=getint();
36     scanf("%s",s);
37     fact[0]=factinv[0]=1;
38     for(register int i=1;i<n;i++) {
39         fact[i]=(int64)fact[i-1]*i%mod;
40         factinv[i]=inv(fact[i]);
41     }
42     sum[0]=1;
43     for(register int i=0;i<n;i++) {
44         const int ch=idx(s[i]);
45         for(register int i=1;i<=n;i++) {
46             sum[i]=(sum[i]-f[i][ch]+mod)%mod;
47             f[i][ch]=(sum[i-1]-f[i-1][ch]+mod)%mod;
48             sum[i]=(sum[i]+f[i][ch])%mod;
49         }
50     }
51     int ans=0;
52     for(register int i=1;i<=n;i++) {
53         ans=(ans+(int64)C(n-1,i-1)*sum[i]%mod)%mod;
54     }
55     printf("%d\n",ans);
56     return 0;
57 }

 

转载于:https://www.cnblogs.com/skylee03/p/7809049.html

相关文章:

  • MongoDB lsm降低 disk lantency
  • CentOS7 LVM添加硬盘及扩容
  • Hanlp等七种优秀的开源中文分词库推荐
  • python基础===抽象
  • 【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
  • 【iOS-cocos2d-X 游戏开发之十六】Cocos2dx编译后的Android自动使用(-hd)高清图设置自适应屏幕...
  • 了解一下ES6: let const
  • 【斗医】【12】Web应用开发20天
  • WCF和IIS宿主的ASP.NET 共享会话
  • ORDER BY,GROUP BY 和DI STI NCT 优化
  • JS中字符串转义
  • 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
  • ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
  • Mybatis介绍
  • USB数据采集卡:labjack T7、T7 Pro系列的技术特点
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 分享的文章《人生如棋》
  • 收藏网友的 源程序下载网
  • HTTP中的ETag在移动客户端的应用
  • Java 内存分配及垃圾回收机制初探
  • magento2项目上线注意事项
  • Python实现BT种子转化为磁力链接【实战】
  • spring boot 整合mybatis 无法输出sql的问题
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 聊聊flink的BlobWriter
  • NLPIR智能语义技术让大数据挖掘更简单
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2020)Java后端开发----(面试题和笔试题)
  • (52)只出现一次的数字III
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转载)Linux 多线程条件变量同步
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core使用ef 6
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net7 环境安装配置
  • @Controller和@RestController的区别?
  • [.net] 如何在mail的加入正文显示图片
  • [20150904]exp slow.txt
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [Android Pro] AndroidX重构和映射
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CF226E]Noble Knight's Path
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [exgcd] Jzoj P1158 荒岛野人