字符串循环同构——最小表示法の板子

循环同构串 string 如果将字符串S=s[1],s[2]…s[n]的所有字符左移一位,然后让第一位字符移动到最后一位,即构成新的字符串:S'=s[2],s[3]…s[n],s[1]。这个操作称为字符串的左移。比如字符串orz左移一次得到字符串rzo。若S串能够通过若干次左移之后变成T串,我们就称S和T循环同构,现在给你一个长度为n的字符串S,询问字符串S是否满足以下条件:存在一个整数k>1,满足k是n的因数。将S分成k段子串,每段等长,长度为n/k。存在一个字符串T,与上述的k段子串都循环同构。如果存在k,T满足上述三个条件,那 阅读详情

字符串的最小表示

一个字符串S通过循环移位能够得到一些别的字符串,比如“abcde”循环一次可以得到“bcdea”,循环两次得到“cdeab”,等等。这些串当中字典序最小的那个就叫做S的最小表示。

求出字符串的最小表示可以方便地判断两个串是否循环同构。

某些别的求解方法

求最小表示或者循环同构实际上有很多别的方法的。。。并且渐进时间复杂度达到理论下界的O(n)的做法也有很多。。

比如说直接求最小表示的话可以把字符串在后面接一遍然后搞一个后缀自动机每次顺着最小的边走n步就可以了呀~
但是常数巨大空间巨大。。。(逃

如果求循环同构的话把第一个串在后面接一遍然后第二个串跑KMP就可以了呀~
其实感觉这种做法的理论复杂度和常数都不比最小表示法啥的差。。

最小表示法

参考2003年集训队论文 周源《浅析“最小表示法”思想在字符串循环同构问题中的应用》

设一个字符串的函数M(S)返回的是从S的第M(S)个字符开始引起的S一个循环表示是S的最小表示。
当要判断两个长度为n的串S和T是否循环同构的时候,首先把S和T都在后面接一遍,然后设两个指针p1和p2分别指向S和T中的字符。当p1=M(S)并且p2=M(T)的时候,如果S和T是循环同构的,那么一定可以得到从p1和p2向后匹配n个位置都是相等的。

最小表示法求字符串循环同构的基本思路就是假设它们是循环同构的,然后去寻找可以成功向后匹配n个字符的位置,如果找不到就说说明它们不是循环同构的。接下来的讨论中假设S和T是循环同构的。
在找M(S)和M(T)的时候,因为我们是从前往后找的,那么只要我们能保证在这个时刻有p1<M(S)并且p2<M(T),就还有机会通过后移指针来找到M(S)和M(T)。

首先令p1和p2都指到第一个字符,显然这个时候一定有p1<M(S)并且p2<M(T)。
然后从这两个位置开始往后匹配,如果成功匹配了n个位置就说明S和T循环同构,返回p1和p2中位置比较靠前的那一个。
但是如果不能成功匹配n个位置,就是说一定有一个位置走着走着不相等了。假设这个时候S(p1+k)>T(p2+k),其他情况是类似讨论的。
现在字符串是这个样子:
这里写图片描述

假如p1已经指到了M(S)这个位置,那么p1往后延伸n个字符形成的字符串一定不大于T的任何一个位置向后延伸n个字符形成的字符串。这个比较好理解,因为M(S)向后n个字符已经是最小字典序的了,找不到比它更小的了。
那么对于p1…p1+k这些位置来说,以它们中的某一个开头,向后延伸n个位置形成的字符串,一定可以在T中找到一个字符串字典序小于它。因为比如找到的那个位置是p1+x,那么只要对应在T中从p2+x开始比较,首先S(p1+x..p1+k-1)和T(p2+x..p2+k-1)都是相等的,比较到p1+k和p2+k这两个位置的时候一定会判断S(p1+k)>S(p2+k)。
这说明p1..p1+k这些位置都不可能成为M(S)。那么我们可以直接把指针移动到p1+k+1。
因为p1和p2某一个指针向后移动n个位置以后一定能找到一个可以判同构的位置,所以这个算法的时间复杂度是线性的。

这里有一个问题就是当我们在求两个串的循环同构的时候返回的p1和p2实际上不一定是M(S)和M(T),因为如果两个串本来就是相等的,它从第一个位置开始跑n个就发现相等然后返回了,但是第一个位置不一定是M(S)或者M(T)。比如“edcba”和“edcba”两个相同的串。最小表示应该是“aedcb”,而如果直接从两个串的开头比较的话会直接返回第一个字符的位置。
为了能够正确求出M(S)和M(T),我们做一个处理就是不要让p1和p2指到同一个位置。当两个指针指到同一个位置的时候把某一个指针后移一位。这样就能避免上面提到的这种情况从而使得求出来的一定是正确的M(S)和M(T)了。

当题目要求的不是两个串是否循环同构而是求字符串的最小表示的时候是一样的,就让p1和p2都指在当前字符串上,一个在0号位置一个在1号位置就可以了。

贴代码:

int MinRep(){
    int i,j,k;
    i=1;j=2;k=0;
    while (i<=n&&j<=n){
        k=0;
        while (v[i+k]==v[j+k]&&k<=n) ++k;
        if (k==n+1) break;
        if (v[i+k]>v[j+k])
          if (i+k<=j) i=j+1;
          else i=i+k+1;
        else
          if (j+k<=i) j=i+1;
          else j=j+k+1;
        if (i==j) ++j;
    }
    return min(i,j);
}

这里有一个优化就是当指针i要跳到p1+k+1的时候,如果p1+k+1比p2的位置要靠前,那么直接跳到p2+1就可以了,因为p1+k+1..p2这些位置会被p2指针检查到,所以是正确的。

扯了这么一大篇结果代码只有这么一点点= =
BZOJ2882可以当做一个板子题。

关于MOS管栅极和栅介质(氧化物)的材料选择 大概解释了高K材料作为栅介质的好处,以及为什么会带来好处,同时引出了金属栅的优点,总结了使用高K材料和金属栅的原因。 阅读详情

相关推荐

Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

[原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结 by edata @2017-5-1 objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法 因为Win8/Win10对系统盘(默认c:)使用了高级权限管理,所以在此盘下操作文件的修改工作都需要管理员权限才行。 基于这个原因,导致非管理员安

edata的博客 7029

最小表示法(模板)

问题:某字符串循环同构的所有字符串中,字典序最小的串是哪个? 1)什么是循环同构串? 例如 "a b c d f e" 字符串长度为 6, 那么就是说有 6 种循环同构的方法 "a b c d f e" , " b c d f e a " , "c d f e a b" , "d f e a b c" , " f e a b c d" , "e a b c d f" 暴力解法:将...

Harington的博客 621

【自动驾驶端到端5:VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning】

从大规模人类驾驶演示中学习类人驾驶策略是有希望的。但是,规划的不确定性使得从驾驶演示中提取驾驶知识是有挑战性的。从统计学习的角度来看,动作(包括实际和速度)是高度随机的,受许多无法建模的潜在因素影响。

weixin_40000560的博客 1404

字符串最小表示法(LeetCode 899. Orderly Queue )

A string S of lowercase letters is given.  Then, we may make any number of moves. In each move, we choose one of the first K letters (starting from the left), remove it, and place it at the end of th...

Coding A World 878

台达B3伺服电机485通讯的调试过程

最近上了一项目,没办法直接把B3伺服接到PLC上去,怎么办?偶说试下直接电脑通过100多米的485线控制好了,定型前的测试就这样展开了。 1、焊CN1口 如果不安装CN1,是开不了机的,要报很多错误,比如SERV EMG ALERT, 上限报警,下限报警什么的,怎么办?直接焊好CN1头子吧,烦了点,但是必要的。 主要接的是11,9,10,32,31,30几个脚,按照图上连接好就是了。 2、 接线路 按照上面的图,接上伺服电机线,编码器线,电源线,包括限位常闭开关、485连线等,就完..

shidong01的博客 1万+

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

【字符串】最小表示法

给定一个字符串 s 和一个整数 k。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。字符串 S 的最小表示为与 S 循环同构的所有字符串中字典序最小的字符串。返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串。最小表示法是用于解决字符串最小表示问题的方法。当字符串 S 中可以选定一个位置 i 满足。则称 S 与 T 循环同构。...

文艺倾年的博客 1176

基于计算机视觉的Windows自动化工具openclaw-win:从原理到实战

计算机视觉与自动化技术正深刻改变人机交互方式,其核心在于让机器具备“感知-决策-执行”的能力。通过图像采集与处理算法,程序可以识别屏幕上的特定元素;结合模拟输入技术,便能自动执行点击、拖拽等操作,形成完整的自动化闭环。这一技术栈在软件测试、数据采集、重复性办公任务等领域具有重要价值,能够显著提升工作效率。开源项目openclaw-win正是这一理念的工程实践,它整合了图像识别与模拟操作模块,为开发者提供了一个研究自动化技术的具体样本。项目涉及模板匹配、坐标计算等关键技术点,并需处理屏幕适配、操作延迟等实际问

weixin_28745975的博客 330

字符串的最小表示法(模板)

循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。 对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得...

HumveeA6的博客 410

项目经理必看:如何建立高效的相关方沟通机制?

你是否遇到过这样的场景?客户突然说“这不是我要的”,开发团队抱怨“需求总变”,高层追问“进度滞后为什么不早说”?这些问题的根源往往是——相关方沟通机制失效。本文聚焦“如何建立高效沟通机制”,覆盖从识别相关方到持续优化的全流程,适用于IT、产品、工程等各类项目。本文将按“理解问题→拆解核心概念→掌握工具方法→实战落地→未来趋势”的逻辑展开,重点讲解“相关方分析矩阵”“沟通计划表”等实用工具,并用“组织生日派对”的案例贯穿全文,让抽象概念变得可感知。相关方识别:用“权力/利益矩阵”找对人(像派对邀请关键客人)

项目管理的博客 1295

【教程4>第1章>第12节】通过Verilog读取txt格式数据进行测试并将结果导入到matlab

我们在verilog的testbench中,调用txt文件,将上述正弦样本数据作为测试激励输入到verilog模块中。通过这个方法,可以将一些较为复杂的数据导入到verilog中,进行FPGA数据处理模块的开发。即通过w方式打开一个新的txt文件,然后将verilog的输出保存到XY1.txt文件中。这个部分是txt文件的路径,实际使用时,修改为您自己的路径,或者将txt文件放在和我一样的路径中。这个是数据长度,matlab产生的txt多少长度,这个参数就修改为多少长度。这个txt就是保存这段数据的文件。

FPGA/MATLAB学习教程/源码/项目合作开发 1378

最小表示法 字符串循环同构问题

用最小表示法返回最小表示串(字典序最小的同构串)第一个字符在原始串中的下标。   用两个指针i,j,i初始化为0,j初始化为1,用k表示当前已经匹配串的长度。如果str[i+k]==str[j+k],j++,否则如果str[i+k]>str[j+k],说明以i开始的同构串肯定不是最小的,并且以i开始的到以i+k开始的都不会是最小的,因为若以i+x开头,0str[j+k],把j移到j+k+1,如果

1554

分布式系统中的“无状态”和“有状态”详解

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。例如登录:用户登录后,我们把登录者的信息保存在服务端 session 中,并且给用户一个 cookie 值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session,从而找到用户的信息。

AI天才研究院 2万+

【字符串循环同构的最小表示法】

循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的S’是adbc。 对于字符串循环同构的最小表示法,其问题实质是求S串的一个位置,从这个位置开始循环输出S,得到的S’字典序最

leolin_的专栏 1380

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最小最大表示法超详细讲解

最小/最大表示法是用来找出字符串的最小/最大字典序的循环同构串的方法,其求解算法可以达到O(N),过程很像KMP算法的next数组推导过程,都是在暴力解法的基础上省去了冗余操作。

EQUINOX1的博客 743

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最小表示法(循环同构串)

定义 长度为n的序列,循环同构串中字典序最小的就是最小表示 序列 4 3 2 1 ,它的循环同构串为 3 2 1 4 ,2 1 4 3 ,1 4 3 2 ,其中字典序最小的就是1 4 3 2 解释 我们最先想到的就是暴力枚举+判断 ,可以对所给序列进行枚举所有的字典序,然后找出最小的字典序即可,但是我们枚举+判断的时间复杂度是很高的,那么我们继续优化 观察发现:对于给定的序列,其中如果所有元素都不重复的化,就例如上述例子,我们找到字典序最小的一定是以最小元素开头的,4 3 2 1 4

qq_44791484的博客 1074

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【董晓算法】竞赛常用知识之字符串1

竞赛常用知识之字符串1

2301_80255237的博客 1693

beyond

题目大意给定两个长度为N字符串A与B,求出最大的L,使得A与B的前L个字符所组成的字符串循环同构。N<=2000000。推一推我们知道循环同构的一个特征:可以找到分界点分成两个字符串,然后交叉相同。例如aab与aba,我们可以把第一个字符串分割成a与ab,把第二个字符串分割成ab与a,那么他们交叉相同。 因此我们可以枚举A中分界点i,那么假设能找到B中分界点j,需要满足以下条件: 1、A的后缀i

不来也不去的一只失忆蝴蝶 607

同构数(循环)

具有下面性质的数a称为"同构数":设b是a的平方,a与b的低若干位相同。输入两个整数a,b (0<=a, b<=99),找出a、b之间全部的同构数。控制台上按照由小到大的顺序输出所有同构数.每一个整数占一行.在0-30之间的同构数有0, 1, 5, 6, 25.控制台输入0-99之间的两个整数a和b.

chenxing118149的博客 352

最小表示法

最小表示法

qq_45832461的博客 234

奇奇怪怪的字符串循环同构问题

昨天看到篇奇怪的论文……讲最小表示法的比较的。有字符串S1、S2,|S1| = |S2|,请在O(N)时间内判断是否存在 i 使得 S1[i...|S1|]+S1[1...i]=S2S1[i ... |S1|]+S1[1...i] = S2 。 显然朴素算法 O(N2)O(N^2)高级的话可以用KMP什么的模版串匹配算法,将S1复制一遍,在里面匹配S2就可以了。然后论文里有一种非常神奇的做法。显

cR's Blog //+1s! 1654

判断两个字符串是否循环同构

设字符串A,和B 判断A 与 B是否循环同构: 令字符串C = A + A(A重复) 通过KMP在C中查找B,若B存在于C中则A与B循环同构

correct 1402

字符串循环同构 分割

思路来源 同一字符串上两区间循环同构 char s[maxn]; int same(int l1, int r1, int l2, int r2) { int i = 0; int j = 0; int len = (r1 - l1 + 1); int k = 0; int cnt = 0; while((i <= r1 or j <= r2) and i <= len + r1 and j <= r2 +len &&

northsky0307的博客 261

算法之---字符串循环移位

问题,给你一个字符串,要求循环左移n位 比如对"abcdefg"循环左移2位,我们要得到"cdefgab"   (不同的考官可能对程序的具体要求不同,这里要求时间复杂度O(n),空间复杂度为O(1),再加附加条件,诸如不能使用库函数,不能使用连续辅助空间(包括动态分配),只能使用若干单个变量即O(1)空间,这里的n指字符串的长度)   解答:字符串的循环移位有如下三种算法思路:  

abilly的专栏 1609

字符串算法之最小表示法

问题描述 一组循环同构的字符串,问字典序最小的表示方法 循环同构 设有两个字符串S,TS,TS,T,如果SSS中存在某个位置满足S[i...n]+S[1...i−1]=TS[i...n]+S[1...i-1]=TS[i...n]+S[1...i−1]=T,则称SSS和TTT循环同构 解决方案 暴力显然是O(n2)O(n^2)O(n2)的 下面介绍最小表示法 假设A,BA,BA,B均为字符串SSS的某一子串,起点分别为i,j(i<j)i,j(i\lt j)i,j(i<j),假设存在某

ComingLiu的博客 690

【最小表示法】【字符串】

最小表示法 1️⃣ 简介 最小表示法就是找 字符串S的循环同构串中字典序最小的一个 的算法,属于是字符串算法。 循环同构串: 例子:字符串S : bcad, 则S的循环同构串为bcad, cadb, adbc, dbca 故循环同构串可以有多个,它是原字符串循环移位产生的字符串 2️⃣ 实现方法 最小表示法其实就是找到位置i,从这个位置输出S,使得到的同构串字典序最小。 可以参考的链接: https://oi-wiki.org/string/minimal-string/ 暴力解法 关键是如何找:需

行码棋 1275
上一篇: [BZOJ2597][Wc2007]剪刀石头布(费用流)
下一篇: [BZOJ2674]Attack(整体二分+树状数组套线段树)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值