spoj SUBLEX (Lexicographical Substring Search) RE的欢迎来看看

SPOJ.com - Problem SUBLEX

  这么裸的一个SAM,放在了死破OJ上面就是个坑。

注意用SAM做的时候输出要用一个数组存下来,然后再puts,不然一个一个字符输出会更慢。

还有一个就是不要多数据输入,估计最后多了几个没用的数字,反正我这么做一直无端端的RE。(就这样浪费了我一天好么!出数据的人这么不负责!)

最后就是,第k大的k是会超过子串数的。(这什么脑残配置?)

  综上,这题除了坑就是坑。

 

代码如下:

 

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 
  4 const int N = 222222;
  5 const int LAST = 90000;
  6 const int K = 26;
  7 
  8 struct Node {
  9     Node *nx[K], *fail;
 10     int dist;
 11     long long sub;
 12 
 13     void Clear(const int d = 0) {
 14         memset(nx, 0, sizeof nx);
 15         fail = 0;
 16         dist = d;
 17         sub = 0;
 18     }
 19 } ;
 20 
 21 struct SAM {
 22     Node node[N << 1];
 23     Node *root, *last;
 24     int ttNode;
 25 
 26     Node *Mem(const int d = 0) {
 27         Node *temp = node + ttNode++;
 28 
 29         temp->Clear(d);
 30 
 31         return temp;
 32     }
 33 
 34     void Clear() {
 35         ttNode = 0;
 36         root = last = Mem();
 37     }
 38 
 39     void Expand(const char c) {
 40         const int idx = c - 'a';
 41         Node *p = last, *np = Mem(p->dist + 1);
 42 
 43         for ( ; p && p->nx[idx] == 0; p = p->fail) {
 44             p->nx[idx] = np;
 45         }
 46         if (p) {
 47             Node *q = p->nx[idx];
 48 
 49             if (p->dist + 1 != q->dist) {
 50                 Node *nq = Mem();
 51 
 52                 *nq = *q;
 53                 nq->dist = p->dist + 1;
 54                 q->fail = np->fail = nq;
 55                 for ( ; p && p->nx[idx] == q; p = p->fail) {
 56                     p->nx[idx] = nq;
 57                 }
 58             } else {
 59                 np->fail = q;
 60             }
 61         } else {
 62             np->fail = root;
 63         }
 64         last = np;
 65     }
 66 
 67     int dist[N << 1];
 68     Node *ptr[N << 1];
 69 
 70     void GetSub() {
 71         memset(dist, 0, sizeof dist);
 72         for (int i = 0; i < ttNode; ++i) {
 73             ++dist[node[i].dist];
 74         }
 75         for (int i = 1; i < ttNode; ++i) {
 76             dist[i] += dist[i - 1];
 77         }
 78         for (int i = 0; i < ttNode; ++i) {
 79             ptr[--dist[node[i].dist]] = node + i;
 80         }
 81         for (int i = ttNode - 1; i >= 0; --i) {
 82             Node *p = ptr[i];
 83 
 84             p->sub = 1;
 85             for (int j = 0; j < K; ++j) {
 86                 if (p->nx[j]) {
 87                     p->sub += p->nx[j]->sub;
 88                 }
 89             }
 90         }
 91         --node[0].sub;
 92         //for (int i = 0; i < ttNode; ++i) { cout << node[i].dist << ' '; } cout << endl;
 93         //for (int i = 0; i < ttNode; ++i) { cout << node[i].sub << ' '; } cout << endl;
 94         //for (int i = 0; i < ttNode; ++i) { cout << i << ": "; for (int j = 0; j < K; ++j) { cout << (node[i].nx[j] ? node[i].nx[j] - node : -1) << ' '; } cout << endl; }
 95     }
 96 } sam;
 97 
 98 char s[N], answer[N];
 99 
100 void Generate(char *const s) {
101     srand(time(0));
102     for (int i = 0; i < LAST; ++i) {
103         s[i] = rand() % 26 + 'a';
104     }
105     s[LAST] = 0;
106 }
107 
108 int Run() {
109     //while (~scanf("%s", s)) {
110     //while (1) {
111         //Generate(s);
112         scanf("%s", s);
113         sam.Clear();
114         for (int i = 0; s[i]; ++i) {
115             sam.Expand(s[i]);
116         }
117         sam.GetSub();
118         //cout << sam.root->sub << endl;
119         //if (sam.ttNode >= (N << 1)) { puts("???"); while (1) ; }
120 
121         int n, k;
122 
123         scanf("%d", &n);
124         while (n--) {
125             Node *p = sam.root;
126             int pos = 0;
127 
128             scanf("%d", &k);
129             //if (k > sam.root->sub) { puts("..."); while (1) ; }
130             k = (k - 1) % sam.root->sub + 1;
131             while (k > 0) {
132                 for (int i = 0; i < K; ++i) {
133                     if (p->nx[i] == 0) {
134                         continue;
135                     }
136 
137                     const int cnt = p->nx[i]->sub;
138 
139                     if (cnt >= k) {
140                         //putchar('a' + i);
141                         answer[pos++] = 'a' + i;
142                         p = p->nx[i];
143                         --k;
144                         break;
145                     } else {
146                         k -= cnt;
147                     }
148                 }
149             }
150             answer[pos] = 0;
151             puts(answer);
152             //puts("");
153         }
154     //}
155 
156     return 0;
157 }
158 
159 int main() {
160     //ios::sync_with_stdio(0);
161     return Run();
162 }
View Code

 

UPD:还有更坑的,我开99999 * 2的SAM节点数是会TLE的,开222222 * 2才AC。我猜肯定是新增的数据各种问题,数据不在范围内了。

 

——written by LyonLys

转载于:https://www.cnblogs.com/LyonLys/p/spoj_sublex.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mt4双线macd_3年内从亏损90多万到获利近760万,我只坚持我的:60分钟MACD双回拉战法!附选股公式...

MACD指标被普遍认为是最经典实用的技术指标之一。其实并不是因为MACD有多么精妙的算法&#xff0c;而是MACD遵循了最基本的“均线指导原则”&#xff0c;形象的将经典双均线系统换了一种更加直观的表达方式。在MT4中&#xff0c;默认应用的是单线MACD指标&#xff0c;而在证券市…

计算机专业书籍速读方法,格式你玩的转?速读5分钟就懂

小编又接到了新问题&#xff0c;有小伙伴说自己64GB的U盘在电脑里格式化只能选ExFAT或者NTFS&#xff0c;不能选择FAT32&#xff0c;求小编解答&#xff0c;小编正好借着这个机会&#xff0c;说说现在电脑格式问题。如果你懒得读&#xff0c;↓↓↓最后一段有答案&#xff0c;如…

Thymeleaf 学习笔记 (4)~~~~

2019独角兽企业重金招聘Python工程师标准>>> 模板布局 模板布局主要用到的标记有这么几个&#xff1a; th:fragment &#xff0c;用来定义片段的&#xff0c;用法&#xff1a;th:fragment"fragmentName"&#xff0c;起一个名字方便被其他地方引用&#xf…

凭证 金蝶_金蝶软件账务处理流程之——凭证录入

金蝶是我们财务人非常熟悉的财务软件&#xff0c;但是我们很多财务人只在应用软件的时候还是会出现很多的问题&#xff0c;为了帮助大家更好地应用这个软件&#xff0c;小编今天就来和大家讲讲关于金蝶软件凭证查询环节的一些基本处理流程。点击主界面“凭证查询”→弹出凭证过…

计算机网申兴趣爱好怎么写,银行网申个人特长和兴趣爱好怎么写

银行网申个人特长和兴趣爱好怎么写银行网申中个人简历及兴趣爱好怎么写?下面jyj135小编为大家整理了银行网申中个人特长和兴趣爱好的写作技巧&#xff0c;希望能为大家提供帮助!银行网申特长及兴趣爱好怎么写?特长Strong Point(1)写强项。弱项一定不要写&#xff0c;面试人员…

人才管理是什么意思_上海托管仓库外包仓库管理什么意思

上海托管仓库外包仓库管理什么意思上海仓库托管外包。好的上海仓库托管是预估好自己的货物总计有多少个方。车子的体积有多少&#xff0c;然后估算出总计需要多少车需要多少钱&#xff0c;需要怎么装车、卸货码放方式是什么样的&#xff0c;算出总的费用然后包干给搬家公司。这…

Makefile学习(二)[第二版]

复杂实例#示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红].PHONY: clean all CC gcc CFLAGS -Wall -gBIN 01test 02test 03testSOURCES $(BIN:.c)OBJECTS $(BIN:.o)all: $(BIN)01test: 01test.o02test: 02test.o03test: 03test.o.c.o:$(CC) $(CFLA…

三维家可以导入别人的方案吗_广州深圳天津形位公差检测三维缺陷检测服务

形位公差检测三维缺陷检测服务标签&#xff1a;形位公差检测 三维缺陷检测服务 三维缺陷检测铸造工艺是一种经济实惠的毛坯成形方式&#xff0c;对于一些形状复杂的零件更能显示出它的经济性。比如汽车发动机的缸体和缸盖&#xff0c;船舶螺旋桨以及精致的艺术品等。本期案例的…

对“粘连”footer布局的思考和总结

经典的"粘连"footer布局 参考文章链接在文章末尾&#xff0c;简单的语言总结如下&#xff1a; 经典的“粘连”footer布局就是。我们有一块内容<main>。当<main>的高度足够长的时候&#xff0c;紧跟在<main>后面的元素<footer>会跟在<main…

这样去写你的 HTML

昨天在 twitter 上说&#xff0c;怎么忍心把页面写得这么难用&#xff1f;是的&#xff0c;这个世界还有一群人等着我们创建出来的东西&#xff0c;可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端&#xff0c;我们又怎么会忍心呢。之前就一直想写这…

iframe懒加载_前端常见问题

原地址&#xff1a;https://blog.csdn.net/Mr_JavaScript/article/details/843110681. flex布局&#xff1a;又叫做弹性布局任何一个容器都可以指定flex布局&#xff0c;如display:flex 或 display:inline-flex注意&#xff1a;设置了flex布局以后&#xff0c;子元素的float&am…

手机运行服务器无响应,《最强蜗牛》服务器无响应怎么办 服务器无响应解决方法...

导读最强蜗牛服务器无响应怎么办&#xff1f;本作在今日迎来了正式的公测&#xff0c;这会导致大批量的玩家同时涌入进来&#xff0c;而服务器也因此而遭受到了非常大的符合&#xff0c;所以会导致后续加入进来的玩家出现服务器无响应进不去的现象。下面就为大家带...最强蜗牛服…

自己动手写操作系统--个人实践

近期開始看于渊的《自己动手写操作系统》这本书&#xff0c;刚開始看就发现做系统的引导盘居然是软盘&#xff01;心里那个汗啊&#xff01; 如今都是U盘了&#xff0c;谁还用软盘。于是考虑用U盘。 于是開始下面步骤&#xff1a; 1、既然书上说给先要把软盘做引导盘&#xff0…

sql加上唯一索引后批量插入_阿里大佬总结的52条SQL语句性能优化策略,建议收藏...

你知道的越多&#xff0c;不知道的就越多&#xff0c;业余的像一棵小草&#xff01;你来&#xff0c;我们一起精进&#xff01;你不来&#xff0c;我和你的竞争对手一起精进&#xff01;编辑&#xff1a;业余草cnblogs.com/SimpleWu/p/9929043.html推荐&#xff1a;https://www…

Web缓存技术

本章导读 缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈&#xff0c;所以读取大容量数据时&#xff0c;使用缓存来直接为客户端服务&#xff0c;可以减少客户端与服务器端的数据交互&#xff0c;从而大大提高程序的性能。 本章从缓存所在的命…

【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面

弧度一块可能有误&#xff0c;需要再研究 导航 【初探HTML5之使用新标签布局】用html5布局我的博客页&#xff01; 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放 【HTML5初探之绘制图像&#xff08;上&#xff09;】看我canvas元素引领下一代web页面 【HTML5初…

关卡 动画 蓝图 运行_UE4入门之路(基础蓝图篇):蓝图的制作

蓝图系统简介蓝图系统是UE4中十分有代表性的一个特点&#xff0c;所谓蓝图就是一种可视化的脚本。该系统非常灵活且非常强大&#xff0c;因为它为设计人员提供了一般仅供程序员使用的所有概念及工具。 程序员能够很方便的创建一个基础系统&#xff0c;并交给策划进一步在蓝图中…

虚拟串口服务器zenetmanager,Avocent服务器/串口管理 KVM

MergePoint Unity交换机在单个设备中结合了 KVM over IP和串行控制台管理技术。这项独特的结合为IT管理员提供了用于访问和控制服务器、网络设备及其他数据中心和分支办公室设备的完整远程管理解决方案。MergePoint Unity交换机直接与物理KVM、USB和串行端口进行安全的远程带外…

KAFKA分布式消息系统

Kafka[1]是linkedin用于日志处理的分布式消息队列&#xff0c;linkedin的日志数据容量大&#xff0c;但对可靠性要求不高&#xff0c;其日志数据主要包括用户行为&#xff08;登录、浏览、点击、分享、喜欢&#xff09;以及系统运行日志&#xff08;CPU、内存、磁盘、网络、系统…

jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...

来源&#xff1a;Gormats Notesfangjian0423.github.io/2017/05/31/springboot-executable-jar/Spring Boot Loader抽象的一些类JarLauncher的执行过程关于自定义的类加载器LaunchedURLClassLoaderSpring Boot Loader的作用SpringBoot提供了一个插件spring-boot-maven-plugin用…