阿狸的打字机

2024-01-06 21:33
文章标签 打字机 阿狸

本文主要是介绍阿狸的打字机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

70分 裸的AC自动机

program type2;
typenode=recordson:array[0..25]of longint;fa,fail,key,e:longint;end;
var	a:array[1..100005]of node; sto:longint=1;st:array[1..100005]of char; len:longint;q,head,next:array[1..100005]of longint;ans,lk:array[1..100005]of longint; n:longint;ask:array[1..100005,0..2]of longint;m:longint;
function getfail(const x:longint):longint;
var	k,w:longint;
beginif (x=1)then exit(0);k:=a[x].key;w:=a[a[x].fa].fail;while (w>0)and(a[w].son[k]=0) do w:=a[w].fail;if w=0 then exit(1) else exit(a[w].son[k]);
end;
procedure buildac;
var	h,t,x,i:longint;
beginh:=0;t:=1;q[1]:=1;while h<t do begininc(h);x:=q[h];a[x].fail:=getfail(x);for i:=0 to 25 do if a[x].son[i]>0 then begininc(t);q[t]:=a[x].son[i];end;end;
end;
procedure init;	var ch:char; w,k,i:longint;
beginw:=1;while not eoln do begininc(len);read(ch);st[len]:=ch;case ch of'B':w:=a[w].fa;'P':begin inc(n); lk[n]:=w; a[w].e:=n; end;'a'..'z':begink:=ord(ch)-ord('a');if a[w].son[k]=0 then begininc(sto);a[w].son[k]:=sto;a[sto].fa:=w;a[sto].key:=k;end;w:=a[w].son[k];end;end;end;buildac;readln(m);for i:=1 to m do beginreadln(ask[i][0],ask[i][1]);//ask[i][0]:=lk[ask[i][0]];ask[i][1]:=lk[ask[i][1]];next[i]:=head[ask[i][1]];head[ask[i][1]]:=i;end;
end;
procedure solve; var w,x,i,p:longint;ch:char;
beginw:=1;for i:=1 to len do beginch:=st[i];case ch of'B':w:=a[w].fa;'P':beginfillchar(ans,sizeof(ans),0);if head[w]=0 then continue;p:=w;while w>1 do beginx:=w;while x>0 do beginif a[x].e>0 then inc(ans[a[x].e]);x:=a[x].fail;end;w:=a[w].fa;end;w:=p;x:=head[w];while x<>0 do beginask[x][2]:=ans[ask[x][0]];;x:=next[x];end;end;'a'..'z':w:=a[w].son[ord(ch)-ord('a')];end;end;for p:=1 to m do writeln(ask[p][2]);
end;
beginassign(input,'input.txt');reset(input);assign(output,'output.txt');rewrite(output);init;solve;close(input);close(output);
end.


满分程序(+dfs序优化)


program type2;
typenode=recordson:array[0..25]of longint;fa,fail,key,e:longint;end;heap=objects:array[1..100005]of longint;procedure add(x,k:longint);function sum(x:longint):longint;end;link=^Tnode;Tnode=recordx:longint;next:link;end;
var	sto:longint=1;
procedure push(var x:link; const t:longint);
var 	p:link;
beginnew(p); p^.x:=t; p^.next:=x; x:=p;
end;
procedure heap.add(x,k:longint);
beginwhile x<=sto do begininc(s[x],k);inc(x,x and (-x));end;
end;
function heap.sum(x:longint):longint;
beginsum:=0;while x>0 do begininc(sum,s[x]);dec(x,x and (-x));end;
end;(*	definitions	for 	useful	objects		*)var	a:array[0..100005]of node;st:array[1..100005]of char; len:longint;q,head,next:array[0..100005]of longint;ge:array[0..100005]of link;lk,ls,le:array[0..100005]of longint; n,tt:longint;ask:array[1..100005,0..2]of longint;m:longint; ans:Heap;
function getfail(const x:longint):longint;
var	k,w:longint;
beginif (x=1)then exit(0);k:=a[x].key;w:=a[a[x].fa].fail;while (w>0)and(a[w].son[k]=0) do w:=a[w].fail;if w=0 then exit(1) else exit(a[w].son[k]);
end;
procedure buildac;
var	h,t,x,i:longint;
beginh:=0;t:=1;q[1]:=1;while h<t do begininc(h);x:=q[h];a[x].fail:=getfail(x);if x<>1 then push(ge[a[x].fail],x);for i:=0 to 25 do if a[x].son[i]>0 then begininc(t);q[t]:=a[x].son[i];end;end;
end;
procedure DFS(const x:longint); var p:link;
begininc(tt);ls[x]:=tt;p:=ge[x];while p<>nil do beginDFS(p^.x);p:=p^.next;end;le[x]:=tt;
end;
procedure init;	var ch:char; w,k,i:longint;
beginw:=1;while not eoln do begininc(len);read(ch);st[len]:=ch;case ch of'B':w:=a[w].fa;'P':begin inc(n); lk[n]:=w; a[w].e:=n; end;'a'..'z':begink:=ord(ch)-ord('a');if a[w].son[k]=0 then begininc(sto);a[w].son[k]:=sto;a[sto].fa:=w;a[sto].key:=k;end;w:=a[w].son[k];end;end;end;buildac;DFS(1);readln(m);for i:=1 to m do beginreadln(ask[i][0],ask[i][1]);ask[i][0]:=lk[ask[i][0]];ask[i][1]:=lk[ask[i][1]];next[i]:=head[ask[i][1]];head[ask[i][1]]:=i;end;
end;
procedure solve; var w,x,i:longint;ch:char;
beginw:=1;for i:=1 to len do beginch:=st[i];case ch of'B':beginans.add(ls[w],-1);w:=a[w].fa;end;'P':beginx:=head[w];while x<>0 do beginask[x][2]:=ans.sum(le[ask[x][0]])-ans.sum(ls[ask[x][0]]-1);x:=next[x];end;end;'a'..'z':begin w:=a[w].son[ord(ch)-ord('a')]; ans.add(ls[w],1); end;end;end;for i:=1 to m do writeln(ask[i][2]);
end;
beginassign(input,'input.txt');reset(input);assign(output,'output.txt');rewrite(output);init;solve;close(input);close(output);
end.


这篇关于阿狸的打字机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577686

相关文章

jq自定义插件—$.fn的使用之(打字机)

原理:         把html里的代码读进来,         然后跳过“<”和“>”之间的代码,         顺便保存了内容的格式,         然后一个定时器,逐个输出。      用到的基础知识: jQuery为开发插件提拱了两个方法,分别是:                 jQuery.fn.extend(object);

css实现文字打字机效果

html <body><p class="line animation">我和我的祖国,一刻也不能分割</p></body> css <style type="text/css">html,body {height: 100%;}body {overflow: hidden;display: flex;justify-content: center;align-items: cent

【主题世界】阿狸对着你卖萌桌面主题

主题名称:《 可爱阿狸桌面主题 》  主题类型:主题世界 - XP主题下载桌面主题 - 可爱阿狸桌面主题  主题大小:1.73MB 更新时间:2013-07-10 主题简介: 可爱阿狸卡通桌面壁纸下载《鼠标右键另存为本地》 可爱阿狸卡通桌面主界面效果图 可爱阿狸卡通桌面开始菜单效果图 可爱阿狸卡通桌面图标效果图 可爱阿狸卡通桌面鼠标效果图

有趣的css - 打字机动画效果

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是使用 css 实现好玩的单行打字机效果,和我一起看看吧。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 知识点: ① animation 动画属性中 steps() 参数

【达内课程】自定义控件(奔跑的阿狸)

这一节要的效果如图 新建AnimationView public class AnimationView extends View {Bitmap[] bitmapArray = new Bitmap[4];int currentIndex = 0;int viewWidth, viewHeight;int sleepTime = 1000;boolean isRunning = true;T

前端对接fastGPT流式数据+打字机效果

首先在对接api时 参数要设置stream: true, const data = {chatId: 'abc',stream: true,//这里true返回流式数据detail: false,variables: {uid: 'sfdsdf',name: 'zhaoyunyao,'},messages: [{ content: text, role: 'user' }]};

bzoj2434: [Noi2011]阿狸的打字机

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2434 一个讲得很详细的题解:http://blog.csdn.net/huzecong/article/details/7769988 思路:这题的想法有点神啊.... 先构建AC自动机,然后怎么判断一个串b是a的子串呢?用fail指针就可以了。如果a串中有节点可以通过fail

翁恺C语言程序设计:学习笔记6(无穷大\计算精度\char\逃逸字符\回车换行与打字机)

无穷大与不存在的数1 浮点数/0:无穷大(正负); 0/0:不存在的数; 整数/0:编译不通过,在C语言中,整数范围内是没有无穷大的,但是浮点数范围内是有无穷大的。 float有7位有效数字; a=1.345f 带有一个f才表示float,不然就是double; 表示相等时尽量不用==,因为精度问题;可以采用fabs(a-b)<1e-12,两者差的绝对值小于很小的数。 计算精度 当需要计算精确

P1383 高级打字机(可持续化线段树)

题目描述 早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。 请为这种高级打字机设计一个程序,支持如下 33 种操作: T x:Type 操作,表示在文章末尾打下一个小写字母 x。U x:Undo 操作,表示撤销最后的 x 次修改操作。Q x:Query 操作,表示询问当前文章中第 x 个字母并输出。请注意 Query 操作并不算修改操作。 文章一开

Vue3 + TypeScript 实现自动打字、打字机动画、动画打字工具(TypeIt)

一、介绍 👵 👵 TypeIt是一个JavaScript库,用于创建简单而流畅的打字效果和动画效果。它可以用于网页开发中的很多场景,例如创建动态文字效果、制作页面过渡动画、增强用户体验等。 我们还可以利用它进行一些后端日志的回显,如果某个进程后端实时或者定时返回结果,前端进行一个动画打字的回显功能,一方面可以让我们的页面更丰富,另一方面可以给客户一个很好的体验。 配置项说明  👇 👇