NOIP提高组【JZOJ4812】string
来源:互联网 发布:西安交大大数据学院 编辑:程序博客网 时间:2024/06/05 18:13
Description
给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位。由于答案可能很大,模109+7 输出。
Data Constraint
对于前30% 的数据,n<=5
对于100% 的数据,k<=n<=10^5
Solution
这道题我们直接算就好啦。考虑将数量不断逼近值T,假设现在还能修改m次,对于当前的的一位Si 和Ti 。
假设Si !=Ti ,那么显然第i位比Ti 小的都比T所在排名前,那么我们直接加(Ti−′a′)∗25m−1∗Cm−1n−i 。特别的,当Ti >Si ,显然当第i位为Si 时是不用修改的,所以方案即是(Ti−′a′−1)∗25m−1∗Cm−1n−i+25m∗Cmn−i 。最后只要将m减一即可。
假设Si =Ti ,那么显然第i位Ti 小的都比T所在排名前,那么我们直接加(Ti−′a′)∗25m−1∗Cm−1n−i 。
代码
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#define ll long longusing namespace std;const ll maxn=100005,mo=1000000007;char s[maxn],t[maxn];int n,m,i,j,k,l,x,y;ll f[maxn],g[maxn],ans;ll mi(ll x,int y){ if (y==1) return x; ll t=mi(x,y/2); if (y%2) return t*t%mo*x%mo;return t*t%mo;}ll c(ll x,ll y){ return f[x]*mi(f[y],mo-2)%mo*mi(f[x-y],mo-2)%mo;}int main(){ freopen("string.in","r",stdin);freopen("string.out","w",stdout); //freopen("data.in","r",stdin); scanf("%d%d\n",&n,&m); scanf("%s\n",s+1); scanf("%s\n",t+1); f[0]=1;g[0]=1; for (i=1;i<=n;i++) f[i]=f[i-1]*i%mo,g[i]=g[i-1]*25%mo; for (i=1;i<=n;i++) if (s[i]!=t[i]){ if (s[i]>t[i]) ans=(ans+(t[i]-97)*g[m-1]%mo*c(n-i,m-1)%mo)%mo; else{ ans=(ans+(t[i]-98)*g[m-1]%mo*c(n-i,m-1)%mo)%mo; ans=(ans+g[m]*c(n-i,m)%mo)%mo; } m--; }else ans=(ans+(t[i]-97)*g[m-1]%mo*c(n-i,m-1)%mo)%mo; ans++; printf("%d\n",ans);}
3 0
- NOIP提高组【JZOJ4812】string
- 【JZOJ4812】string
- 【JZOJ4812】【NOIP2016提高A组五校联考2】string
- 【NOIP提高组五校联考】string
- NOIP提高组 单峰
- NOIP提高组 积木
- NOIP提高组 看电影
- NOIP提高组 鼎纹
- NOIP提高组 千帆渡
- NOIP提高组 Brothers
- NOIP提高组 Crisis
- NOIP提高组 Word
- NOIP提高组 闭门造车
- NOIP提高组 爬山
- 【NOIP提高组】爬山
- 【NOIP提高组】Map
- 【NOIP提高组】矩阵
- 【NOIP提高组】整除
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- Java:常用集合类(List、Map、Set、Queue、Stack)
- 10.5号新生练习赛题解
- windows安装nodejs环境
- Zygote和System进程的启动过程
- NOIP提高组【JZOJ4812】string
- leetcode 7. Reverse Integer
- 根据先序遍历序列和中序遍历序列重建二叉树
- 51Nod-矩阵中不重复元素的个数
- python 如何更改工作目录,以及如何更改spyder起始工作目录
- MVC,MVP,MVVM的区别
- 坚持#第58天~不小心干掉了JS+css+html的课本
- HDU 2204 - Eddy's爱好- 容斥原理
- 题目1001:A+B for Matrices