首页 > 其他分享 >luogu P1385 密令

luogu P1385 密令

时间:2022-09-27 18:46:12浏览次数:61  
标签:10 leq P1385 luogu 字母 int 密令 define 字典

密令

题目描述

给定一小写字母串 \(s\),每次操作你可以选择一个 \(p\)(\(1 \leq p \lt |s|\))执行下述修改中的任意一个:

  1. 将 \(s_p\) 改为其字典序 \(+1\) 的字母,将 \(s_{p+1}\) 改为其字典序 \(-1\) 的字母;
  2. 将 \(s_p\) 改为其字典序 \(-1\) 的字母,将 \(s_{p+1}\) 改为其字典序 \(+1\) 的字母。

在经过任意多次操作后,串 \(s\) 能变化成多少种字符串?

修改过程中必须保证 \(s\) 是合法的小写字母串(即不能对字母 a 进行字典序 \(-1\) 的操作),答案对 \(10^9 + 7\) 取模。

输入格式

第一行一个整数 \(T\),表示数据组数

接下来 \(T\) 行,每行一个小写字母串 \(s\)。

输出格式

输出 \(T\) 行,每行一个整数表示答案。

样例 #1

样例输入 #1

3
aaaaaaaaa
ya
klmbfxzb

样例输出 #1

0
24
320092793

提示

  • 对于 \(30\%\) 的数据,\(T=1,|s| \leq 10\);
  • 对于 \(60\%\) 的数据,\(T \leq 10\);
  • 对于 \(100\%\) 的数据,\(T \leq 10000,1 \leq |s| \leq 100\)。

思路

显然我们可以知道的是这两个操作可以使每个位置随意转移
所以我们只维护一维总和 显然还要维护的一维是个数 cnt肯定是与个数有关的
但是这样我们的状态数就是2600*100 如果再乘上T 肯定会超时
那我们发现这个状态设计其实是涵盖了所有情况的 我们只需要算一次
然后O(1)查询即可

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 1e9+7;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
int dp[110][2610];
void solve() {
    string s;cin>>s;
    int cnt=0;
    for(int i=0;i<s.size();i++)cnt+=s[i]-'a';
    cout<<(dp[s.size()][cnt]-1)%mod<<endl;
}
signed main(){
    fast
    int T;cin>>T;
    for(int i=0;i<26;i++)dp[1][i]=1;
    for(int i=2;i<=100;i++) {
        dp[i][0] = 1;
        for (int j = 1; j <= 2600; j++)
            for (int k = 0; k < 26; k++)
                if (j - k >= 0)(dp[i][j] += dp[i - 1][j - k]) %= mod;
    }
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}

标签:10,leq,P1385,luogu,字母,int,密令,define,字典
From: https://www.cnblogs.com/ycllz/p/16735553.html

相关文章

  • 【luogu P6419】Kamp(换根DP)
    Kamp题目链接:luoguP6419题目大意一棵树上有一些点有人,边有通过的长度,然后对于每个点,你从这个点出发经过所有人(不用回到原来位置)的最短时间。其它人不会动,只有你去找人......
  • [luogu3980]志愿者招募
    记$x_{i}$为第$i$类志愿者数量$,y_{j}=\sum_{j\in[s_{i},t_{i}]}x_{i}-a_{j}$​,则问题即$$\foralli\in[1,m],x_{i}\ge0\\\forallj\in[1,n],y_{j}\ge0\\y_{1}-\sum_{......
  • 【luogu CF1109E】Sasha and a Very Easy Test(线段树)
    SashaandaVeryEasyTest题目链接:luoguCF1109E题目大意维护一个长度为n的序列,有区间乘,单点除(保证能整除),区间求和答案对p取模。p不一定是质数。思路麻了考场......
  • [luogu p8251] [NOI Online 2022 提高组] 丹钓战
    [P8251NOIOnline2022提高组]丹钓战-洛谷|计算机科学教育新生态(luogu.com.cn)容易发现对于一次查询\([L,R]\),\(L\)一定是第一个入栈的,也是成功的,答案至少为......
  • luogu P1052 [NOIP2005 提高组] 过河
    [NOIP2005提高组]过河题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳......
  • luogu P2233 [HNOI2002]公交车路线
    [HNOI2002]公交车路线题目描述在长沙城新建的环城公路上一共有\(8\)个公交站,分别为A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一......
  • luogu P1772 [ZJOI2006] 物流运输 (dp, 最短路)
    https://www.luogu.com.cn/problem/P1772虽然是图论背景,但是1-n天之间是线性关系。没法贪心决策,考虑dp:我本来写的dp是i-1转移到i,但是这样没法处理哪一天能走哪些最短路......
  • luogu P1410 子序列
    子序列题目描述给定一个长度为\(N\)(\(N\)为偶数)的序列,问能否将其划分为两个长度为\(N/2\)的严格递增子序列。输入格式若干行,每行表示一组数据。对于每组数据,首......
  • 【luogu P4218】珠宝商(SAM)(点分治)(根号分治)
    珠宝商题目链接:luoguP4218题目大意给你一棵树,每个点有一个字符。再给你一个字符串s。然后问你树上的所有简单的路径在s上的出现次数的和。思路一个比较神奇的题......
  • luogu P7632 题解
    一.思路我们可以先把时间换成以秒为单位的,然后在枚举每一秒时谁领先。二.重要点我们可以用string读入时间,再用一个函数以秒为单位提取出来(在程序中的函数名:tiqu)......