题目描述

给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位。

由于答案可能很大,模10^9 + 7 输出。

输入

第一行为两个整数n; k

第二行一个字符串S

第三行一个字符串T,(T即是k位与S不同的串)

输出

输出一行取模后的答案。

样例输入

4 1

abcd

bbcd

样例输出

76

数据范围

对于前30% 的数据,n<=5

对于100% 的数据,k<=n<=10^5

解法

类似于数位动态规划。

代码

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<string.h>
  5. #include<algorithm>
  6. #define ll long long
  7. #define ln(x,y) ll(log(x)/log(y))
  8. #define sqr(x) ((x)*(x))
  9. using namespace std;
  10. const char* fin="string.in";
  11. const char* fout="string.out";
  12. const ll inf=0x7fffffff;
  13. const ll maxn=100007,mo=1000000007;
  14. ll n,m,i,j,k,ans,bz,cnt;
  15. char a[maxn],b[maxn];
  16. ll c[maxn],fact[maxn];
  17. ll qpower(ll a,ll b){
  18. ll c=1;
  19. while (b){
  20. if (b&1) c=c*a%mo;
  21. a=a*a%mo;
  22. b>>=1;
  23. }
  24. return c;
  25. }
  26. ll N(ll v){
  27. return qpower(v,mo-2);
  28. }
  29. ll C(ll u,ll v){
  30. return fact[v]*N(fact[u])%mo*N(fact[v-u])%mo;
  31. }
  32. int main(){
  33. freopen(fin,"r",stdin);
  34. freopen(fout,"w",stdout);
  35. scanf("%d%d",&n,&m);
  36. scanf("%s%s",a+1,b+1);
  37. bz=0;
  38. for (i=1;i<=n;i++)
  39. if (a[i]<b[i]){
  40. bz=1;
  41. break;
  42. }
  43. fact[0]=1;
  44. for (i=1;i<=n;i++) fact[i]=fact[i-1]*i%mo;
  45. cnt=0;
  46. for (i=1;i<=n;i++){
  47. for (j='a';j<b[i];j++){
  48. if (j==a[i]) {
  49. if (m-cnt>n-i) continue;
  50. ans=(ans+(C(m-cnt,n-i))*((qpower(25,m-cnt))%mo))%mo;
  51. }
  52. else {
  53. if (m-cnt-1>n-i) continue;
  54. ans=(ans+C(m-cnt-1,n-i)*(qpower(25,m-cnt-1))%mo)%mo;
  55. }
  56. }
  57. if (a[i]!=b[i]) cnt++;
  58. if (m==cnt) break;
  59. }
  60. ans=(ans+1)%mo;
  61. printf("%lld",ans);
  62. return 0;
  63. }

启发

类似于这一题

往死里打

【JZOJ4812】【NOIP2016提高A组五校联考2】string的更多相关文章

  1. NOIP2016提高A组五校联考4总结

    坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题, ...

  2. 【NOIP2016提高A组五校联考4】square

    题目 分析 首先,设\(f_{i,j}\)表示最大的以(i,j)为左下角的正方形的边长. 转移显然,\(f_{i,j}=\max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1})+1\ ...

  3. 【NOIP2016提高A组五校联考4】label

    题目 题目 20%算法 设\(f_{i,j}\)表示第i个节点选了j这个权值的方案数. 显然转移方程为,\[f_{i,j}=\Pi_{v=son(i)}(\sum_{k=1}^{j-k}f_{v,k} ...

  4. 【NOIP2016提高A组五校联考4】ksum

    题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r].[l,r+1]一定也被取了出来. 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子 ...

  5. NOIP2016提高A组五校联考3总结

    第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. ...

  6. 【NOIP2016提高A组五校联考2】tree

    题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的 ...

  7. 【NOIP2016提高A组五校联考2】running

    题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每 ...

  8. 【NOIP2016提高A组五校联考2】string

    题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 ...

  9. NOIP2016提高A组五校联考2总结

    第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了, ...

随机推荐

  1. [LOJ#162]模板题-快速幂2

    <题目链接> 注意:这可能也是一道模板题. 注意2:$p=998224352$ 注意3:对于$100\%$的数据,$n\leq 5 \times 10^6$ 这个题很启发思路,如果直接快速 ...

  2. Ceisum官方教程2 -- 项目实例(workshop)

    原文地址:https://cesiumjs.org/tutorials/Cesium-Workshop/ 概述 我们很高兴欢迎你加入Cesium社区!为了让你能基于Cesium开发自己的3d 地图项目 ...

  3. MySQL时间格式转换

    1.时间转换成特定字符串 例:select DATE_FORMAT(now(),'%Y-%m-%d %H:%i::%s'); --> '2019-10-16 10:59::18' 2.一种字符串 ...

  4. HBase的一些关于CRUD方法

    配置内容 static{configuration = HBaseConfiguration.create();  //创建配置文件(也就是load工程包目录下的配置文件hbase-site.xml) ...

  5. MySQL系列(六)--索引优化

    在进行数据库查询的时候,索引是非常重要的,当然前提是达到一定的数据量.索引就像字典一样,通过偏旁部首来快速定位,而不是一页页 的慢慢找. 索引依赖存储引擎层实现,所以支持的索引类型和存储引擎相关,同一 ...

  6. linux和window双系统下修改系统启动项

    参考:http://jingyan.baidu.com/article/63acb44ae4062c61fcc17e27.html: 我们在安装双系统之后经常会遇到想打开windows但默认启动项是u ...

  7. Winform 分页

    1.图列展示 2.分页控件代码 Paging.Designer.cs partial class Paging { /// <summary> /// 必需的设计器变量. /// < ...

  8. Tomcat服务启动,项目链接没反应

    该原因是因为tomcat的服务已启动,未停止又重新启动项目造成:只要停止服务,再次重新启动即可

  9. ArrayList,LinkedList,Vestor

    Collection是最基本的集合接口,声明了适用于JAVA集合的通用方法,list和set都继承自collection接口. Collection接口的方法 boolean add(Object o ...

  10. POJ 2031 Building a Space Station (prim裸题)

    Description You are a member of the space station engineering team, and are assigned a task in the c ...