From 2020牛客NOIP赛前集训营-提高组(第二场)

传送门


分析

像我这么菜就只会模拟呀(考场CE全部爆零QWQ)

题意就是不断跳到下一个字母问总共跳的长度有多长,

首先用一个变量存下初始位置\(len-1\),(以下使用0开头,方便后面统计)

但显然暴力跳会T飞,必然存在循环节,长度为字母个数所贡献的答案为字符串长度

那么考虑高精度,求出有多少个循环节贡献的字符串长度,这里可以将星号视为所有字母,

关键就是余数部分,考虑用vector存下每个字母的位置,以及该位置下对应vector的位置,

那直接vector下标往后移余数位就可以了呀。


代码

#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
#include <algorithm>
#define rr register
using namespace std;
const int mod=998244353,N=100011;
char S[N],T[N]; vector<int>K[27];
int Test,loc[N][2],c[N],len,LEN,ans;
inline void Mo(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
inline signed doit(int l,int r,int C1,int C2){
rr int g=0,s=0,tot=0,cho;
for (rr int i=l;i<=r;++i) c[i-l+1]=T[i]^48;
for (cho=r-l+1;!c[cho];--cho); --c[cho];
for (rr int i=cho+1;i<=r-l+1;++i) c[i]=9;
for (rr int i=l;i<=r;++i,g=s%C1)
s=g*10+c[i-l+1],c[++tot]=s/C1;
s=0;
for (rr int i=tot;i;--i)
s+=c[i]*C2,c[i]=s%10,s/=10;
for (rr int i=1;i<=tot;++i) s=(s*10ll+c[i])%mod;
Mo(ans,s);
return g;
}
signed main(){
scanf("%s%d",S,&Test),len=strlen(S);
for (rr int i=0;i<len;++i) K[S[i]^96].push_back(i),loc[i][0]=K[S[i]^96].size()-1;
for (rr int i=0;i<len;++i) K[0].push_back(i),loc[i][1]=i;
for (rr int LEN;Test;--Test){
scanf("%s",T),LEN=strlen(T),ans=0;
rr int l=0,r=0,beg=len-1,flag=1;
for (rr int f=0,now;l<LEN;l=++r){
if (T[l]=='*') T[l]=96,f=1; else f=0;
rr int G=T[l]^96,siz=K[G].size(),nxt;
if (!siz) {flag=0; break;}
if (l+1<LEN&&isdigit(T[l+1]))
for (;r+1<LEN&&isdigit(T[r+1]);++r);
if (K[G][siz-1]<=beg) nxt=K[G][0];
else nxt=*upper_bound(K[G].begin(),K[G].end(),beg);
if (beg<nxt) Mo(ans,nxt-beg),beg=nxt;
else Mo(ans,len-beg+nxt),beg=nxt;
if (l<r){
if (now=doit(l+1,r,siz,len)){
nxt=K[G][(loc[beg][f]+now)%siz];
if (beg<nxt) Mo(ans,nxt-beg),beg=nxt;
else Mo(ans,len-beg+nxt),beg=nxt;
}
}
}
if (!flag) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}

#高精度,模拟,vector#C 前缀的更多相关文章

  1. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  2. PTA笔记 堆栈模拟队列+求前缀表达式的值

    基础实验 3-2.5 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数: int IsFull(Sta ...

  3. 高精度模板(Vector实现更加方便)

    计算的数long long 甚至更大的数据类型的都存不下的时候,应该怎么办 ? 解决方法 :我们可以把一个很大的数当做字符串进行处理,这时候就需要用到高精度. 话不多说,咱们边看代码边处理 : 加法 ...

  4. 绿书模拟day10 单词前缀

    [题目描述]一组单词是安全的,当且仅当不存在一个单词是另一个单词的前缀,这样才能保证数据不容易被误解,现在你手上有一个单词集合s,你需要计算有多少个自己是安全的.注意空集永远是安全的.[输入格式]第一 ...

  5. 2018.06.29 NOIP模拟 繁星(前缀和)

    繁星 [问题描述] 要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢.突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能是两个颜色之一,白或黑.像素(x,y ...

  6. 2018.06.29 NOIP模拟 区间(前缀和差量)

    区间(interval.cpp) 时限:2000ms 空间限制:512MB [问题描述] 给出一个长度为 n 的序列 a[1]-a[n]. 给出 q 组询问,每组询问形如<x,y>< ...

  7. BestCoder 2nd Anniversary/HDU 5718 高精度 模拟

    Oracle Accepts: 599 Submissions: 2576 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/26 ...

  8. Tournament Chart【模拟+vector+map+string】

    Tournament Chart 传送门:链接  来源:UPC10889 题目描述 In 21XX, an annual programming contest, Japan Algorithmist ...

  9. 模拟vector

    实现了vector的模板,insert, erase, push_back, iterator #include<iostream> #include<string.h> #i ...

  10. 2018.10.02 NOIP模拟 聚会(前缀和)

    传送门 今天的签到题. 直接前缀和处理一下就秒了. 然而考试的时候智障用线段树维护被卡成了30分,交到OJ一测竟然有100? 搞得我都快生无可恋了. 如果用线段树来做可以类比这道题的写法,直接维护区间 ...

随机推荐

  1. Ubuntu常用工具和问题整理

    安装Ubuntu虚拟机时常会遇到的几个问题 1.安装时设置镜像 安装Ubuntu系统时设置国内镜像可以加快安装速度:http://mirrors.aliyun.com/ubuntu/ 参考:ubunt ...

  2. WSL2镜像文件压缩

    WSL2的镜像文件(*.vhdx)支持自动扩容,但是一般不会自动缩容.一旦某次存放过大文件以后,即使后续删除,镜像文件体积仍然不会缩小,导致大量磁盘空间浪费.因此,可以定期对镜像文件进行手动压缩. 镜 ...

  3. 【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误

    问题描述 使用Python SDK(Confluent)相关方法获取offset或lag时, 提示SSL相关错误, 是否有更清晰的实例以便参考呢? 问题解决 执行代码,因为一直连接不成功,所以检查 c ...

  4. 【Azure Redis 缓存】Azure Reids是否可以开启慢日志(slowlog)和执行config指令

    问题描述 使用Azure Redis,是否可以开启慢日志来查看最近时间中执行比较耗时的指令呢? 同时,如何执行Redis的Config只能来修改配置呢? 根本原因 一:Azure Reids通过Red ...

  5. 使用 MyBatis 操作 Nebula Graph 的实践

    本文首发于 Nebula Graph Community 公众号 我最近注意到很多同学对于 ORM 框架的需求比较迫切,而且有热心的同学已经捐赠了自己开发的项目,Nebula 社区也在 working ...

  6. 软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式

    软件icon制作流程,就一张256-256的图即可,一键生成windows所有格式 好久不用这个都有些生疏了,还特意做了好几个尺寸的图,结果白弄了,软件会自动生成. 1.准备256-256px的图 2 ...

  7. FastGithub.UI64位中文版V2.1.4绿色版 - 软件推荐

    推荐理由 相对于改hosts,这个更好用 FastGithub.UI64位中文版V2.1.4绿色版 https://www.cr173.com/soft/670733.html

  8. 可穿戴智能手环解决方案之BLE的ADV广播协议解读

    一 概念 直接上英文原文,怕自己的翻译误导大家. When a BLE device is advertising, it periodically transmits packets, which ...

  9. day05-Lombok、SpringInitializer

    Lombok.Spring-Initializer 1.Lombok 1.1Lombok介绍 Lombok的作用是: 简化Javabean的开发,可以使用Lombok的注解让代码更加简洁 Java项目 ...

  10. Client请求外部接口标准处理方式

    简单记录下client外部请求代码的我认为比较标准的书写格式 public List<GdtDailyBalanceReportAO> getGdtDailyReportList2(Lon ...