题目描述:

茉优最近研究发现,一个人的想愿能力可以认为是字符串S的一个子串S[l,r],而连接值可以认为是这个子串的本质不同子序列个数。现在她想验证她的结论是否正确,于是她给了你Q个询问,希望你帮她来计算,注意空串也是子序列。

因为茉优已经有一个答案了,所以你只要输出ZQ的值检验即可。

思路:

考虑对于取以字符i为结尾的转移矩阵,是除了单位矩阵外,第一列为都为1,恰好表示除了以i为结尾的情况其他情况都*2.

于是构建出每个字母的转移矩阵,是一个53*53的矩阵,叫它C[i]。

对于每一个询问,答案其实是前Ar个矩阵的乘积,乘上前Al-1个矩阵的逆。

但是由于矩阵不满足交换律,所以我们呢要做这样的预处理。

Ar=Ar-1*Cs[a[r]]

B表示逆矩阵。

Bl=Cs[a[l]]*Bl-1

Ans=一个1*m的矩阵(只有第一位为0)*Bl*Ar

仔细分析可以发现关于B矩阵我们只需要知道第一行每一位数的数值,

A矩阵我们只需要知道每一列的和。

并且由于每个字母转移矩阵的特殊性,计算过程中结果通常只和一行或一列相关,于是每次维护或一列即可,转移时O(53)

总效率就是O(n*53).

以下代码:

#include<bits/stdc++.h>
#define il inline
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=1e6+5,p=998244353;
char s[N];
int Q,a0,b0,B,q,R,n,tag[55],ans;
struct node{int l[55];
}a[N],b[N],c[55];
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;
}
il int C(char a){if(a<='Z')return a-'A'+1;return a-'a'+27;
}
il int mu(int x,int y){if(x+y>=p)return x+y-p;return x+y;
}
int main()
{scanf(" %s",s+1);n=strlen(s+1);for(int i=0;i<53;i++)c[i].l[i]=a[0].l[i]=1;for(int i=1;i<=n;i++){int k=C(s[i]);for(int tmp,j=0;j<53;j++){tmp=c[j].l[k];c[j].l[k]=a[i-1].l[j];a[i].l[j]=mu(mu(a[i-1].l[j],a[i-1].l[j]),p-tmp);}}for(int i=0;i<53;i++){for(int j=0;j<53;j++){c[i].l[j]=0;}c[i].l[i]=1;}b[0].l[0]=1;for(int i=1;i<=n;i++){int k=C(s[i]);for(int tmp,j=0;j<53;j++){tmp=mu(c[k].l[j],p-tag[j]);c[k].l[j]=mu(c[k].l[j],tmp);tag[j]=mu(tag[j],tmp);b[i].l[j]=mu(c[0].l[j],p-tag[j]);}}Q=read();a0=read();b0=read();B=read();q=read();R=read();while(Q--){int a1,b1,l,r;a1=mu(mu(1ll*B*a0%p,1ll*q*b0%p),mu(ans,R));b1=mu(mu(1ll*B*b0%p,1ll*q*a0%p),mu(ans,R));a0=a1;b0=b1;l=a0%n+1;r=b0%n+1;if(l>r)swap(l,r);ans=0;for(int i=0;i<53;i++){ans=mu(ans,1ll*a[r].l[i]*b[l-1].l[i]%p);}}printf("%d\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10291652.html

2019.01.19-2018年6月NEYC集训sequence相关推荐

  1. 2019.01.19-2018年6月NEYC集训counting

    题目描述: 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些边依次加入图 ...

  2. 数据库系统期末总结(三)(往届试卷2018年12月A卷、B卷、E卷,2019年5月A卷,选择题终篇)

    接着上次的总结:https://blog.csdn.net/qq_41938259/article/details/103532401 这是我对<数据库系统基础>第三次期末总结.这次是剩下 ...

  3. IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 “淇℃伅”(2019/01/25)

    转载:IntelliJ IDEA 2018.3.3配置 Tomcat 9,控制台出现中文乱码 "淇℃伅"(2019/01/25) - What'_up - 博客园(win10系统) ...

  4. 2018年11月26日到2019年4月26日工作汇总

    2018年11月26日到2019年4月26日工作汇总 2018年11月26日-2017年11月30日 上午:各种协议的填写,已经有关表单的培训 下午:对公司目前做的项目的培训,以及明确我当前的工作 部 ...

  5. 2018年08月19日发烧诸事记

    2018年08月19日发烧诸事记 关于发烧给敲响的警钟 八月十六日,中午突然觉的有发烧症状,会宿舍喝了些水便回去了,下午上课时情况愈加严重,浑身发冷,无法正常训练,三点多时便去永康街上的社区医疗服务中 ...

  6. a360desktop有用吗_A360 Desktop 停用 - 2018 年 6 月 19 日

    发生了哪些变化及其原因? Autodesk 一直致力于面向设计人员提供出色的软件.为了确保尽可能提供优质服务,我们会定期检查我们的产品组合,确定应将精力和资源重点投入在哪些方面,以便更好地迎合客户需求 ...

  7. 5.5 C语言练习(数日子:要求输出三个整数,分别代表年月日。例如 2018 7 19 当2018年1月1日为第一天,那么7月19日是第多少天?)

    [练习] 题目要求:数日子.要求输出三个整数,分别代表年月日.例如 2018 7 19 当2018年1月1日为第一天,那么7月19日是第多少天? #include <stdio.h>int ...

  8. NEO社区开发报告(2018年12月至2019年1月)

    这是NEO News Today 发布的第二份NEO社区开发报告.本报告涵盖了在2018年12月和2019年1月期间,NEO核心协议和社区开发者创建的独立项目的主要贡献. 社区通过了一项新倡议,各NE ...

  9. 2018年7月19日日报

    姓名:任光烨 日期:2018年7月19日 今日学习任务:学习Linux操作指令. 今日完成情况:都已完成,100~200代码. 今日开发中出现的问题汇总:无. 今日未解决问题:无. 今日开发收获:学习 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第5期)
  2. 黄聪:Ubuntu下使用低版g++编译器编译TSE
  3. 哇 跨行竞争 Python竟能替代PS完成海报设计
  4. Windbg学习 (0x0002) 命令基础
  5. python编程django项目django.template.exceptions.TemplateDoesNotExist: registration/login.html解决方法
  6. [转载]二叉树先序、中序、后序三种遍历的非递归算法
  7. linux 切图软件下载,学会23个linux常用命令,不做前端切图仔~
  8. 用原生JavaScript实现简单轮播图
  9. joomla \libraries\joomla\session\session.php 反序列化截断畸形字符串导致对象注入漏洞...
  10. 编辑器笔记——sublime text3 编译sass
  11. 山东大学项目实训-智能人物画像分析系统
  12. Fundamentals of Computer Graphics(4th Ed)--Introduction(计算机图形学翻译级笔记)
  13. 固态U盘能装linux么,用u盘在固态硬盘上安装linux 多重开启系统
  14. python字符串后面添加字符串_Python字符串中添加、插入特定字符的方法
  15. Python编程——实现屏幕广告语的滚动
  16. perl data::dumper 模块使用
  17. React 调和(Reconciler)原理理解
  18. 您好!欢迎关注异贝!异贝是中国8000万中小微企业忠实的朋友,与您一起成长。异贝商学院今天与您分享:健身行业异贝引客、锁客方案设计!
  19. 袋鼠云数栈UI5.0体验升级背后的故事:可用性原则与交互升级
  20. 小白入门Git详细教程

热门文章

  1. python之.py生成.exe可执行文件
  2. windows server2008无法将本地文件复制到远程计算机,windows2008/2012无法从本地复制文件到远程服务器处理方法...
  3. 电机驱动板连线_伺服驱动器的工作原理和内部结构是什么?
  4. showmodaldialog 为什么不能复制_防复制的门禁读头可以防止UID和FUID读卡器
  5. c语言怎么让字母倒序排列尼,如何倒序单词顺序输出 ? 我是没辙了
  6. 思科怎么隐藏端口_这些著名商标下的隐藏设计,你能发现吗?
  7. modbus rtu java 通讯_android Modbus Rtu 通讯例子
  8. python中time库引用不正确的_python模块知识一 自定义模块、time、datetime时间模块...
  9. 圣地亚哥的计算机科学在哪个学院,加州大学圣地亚哥分校计算机科学在哪个学院?...
  10. mysql 特殊运算_用特殊的MySQL运算符获得更多数据比较功能