大致题意:
见:http://bbezxcy.iteye.com/blog/1439384
大致思路:
最小表示法果然快啊!!从7000多ms优化到900ms,膜拜Orz。
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int inf=1<<30;
const int nMax =800000;
char sss[nMax];
int num[nMax];
int minexp(int *s,int x) {
int i=0,j=1,k=0,t;
while(i<x&&j<x&&k<x) {
t=s[ (i+k)%x ]-s[ (j+k)%x ];
if(t==0) k++;
else {
if(t>0) i+=k+1;
else j+=k+1;
if(i==j) j++;
k=0;
}
}
return i<j?i:j;
}
int main(){
int i,j,len,a,b,n;
while(scanf("%s",sss)!=EOF){
len=strlen(sss);
for(i=0;i<len-1;i++){
if(sss[i]<=sss[i+1]){
num[i]=sss[i+1]-sss[i];
}
else{
num[i]=8-(sss[i]-sss[i+1]);
}
}
if(sss[len-1]<=sss[0]){
num[len-1]=sss[0]-sss[len-1];
}
else{
num[len-1]=8-(sss[len-1]-sss[0]);
}
n=len;
int pos1=minexp(num,n);
for(i=pos1;i<len;i++){
printf("%d",num[i]);
}
for(i=0;i<pos1;i++){
printf("%d",num[i]);
}printf("\n");
}
return 0;
}
分享到:
相关推荐
"最大最小表示法"是字符串处理中的一个概念,通常与排序、查找和优化存储相关。在此,我们将深入探讨这个主题。 最大最小表示法,也称为最小最大压缩(Min-Max Compression),是一种用于存储和检索有序或部分有序...
最小表示法,也被称为Morris-Pratt算法或者KMP预处理,是计算机科学中解决字符串匹配问题的一种高效方法。这个方法由C.A.R. Hoare在1968年首次提出,后来由Morris和Pratt进行了改进,主要用于优化Boyer-Moore算法和...
标题中提到的“最小表示法”是一种解决字符串问题的算法思想,特别是在处理字符串循环同构问题时非常有用。在深入了解之前,我们首先要明白几个基本概念。 字符串循环同构是指一个字符串可以被看作是另一个字符串的...
最小表示法是一种在字符串处理和算法竞赛中不太常见但非常经典的思想,主要用于解决字符串的循环同构问题。在本文中,我们将深入探讨最小表示法及其在解决特定问题上的应用。 循环同构指的是两个字符串可以通过有限...
在C语言中,查找字符串中最小字符串的问题是一个基础但有趣的编程练习。这个问题通常涉及比较字符串长度,找到字符串数组中长度最短的那一个。这里,我们将会深入探讨如何使用C语言来解决这个问题,并通过实际代码...
jvm如何处理长字符串?java的classs文件中,constant_utf8_info的长度是u2,也就是说,一个字符串最长是65535个字节,但是,在本机做测试,超过这个长度的字符串也是允许的,原因是什么?
本文档是一份PPT学习教案,旨在指导学习者通过最小表示法来应对字符串循环同构问题。 循环同构,顾名思义,是指在对字符串执行循环移位操作后能够得到另一个字符串的情况。例如,字符串"s1 = 'a b c d'"经过一次...
最小表示法 ioi2003 周源
在LabVIEW中,数据主要通过数据类型表示,字符串可以以单个字符串或字符串数组的形式存在。字符串数组允许我们存储多个独立的字符串,每个字符串都有自己的索引。拆分后的子字符串通常会存储在一个字符串数组中。 ...
2. **字符串变量的定义与初始化**:掌握如何在C语言中正确地定义与初始化字符串变量。 3. **字符串操作**:学习常见的字符串操作方法,如比较、输入/输出等。 4. **错误处理**:了解常见的字符串操作错误,并学会...
2. **数据解析**:接收到的数据可能以字符串形式返回,比如"0x1A",或者直接作为整数类型。如果为字符串,需要进行预处理,去除前缀"0x",然后将剩余的16进制字符转换成对应的十进制数值。你可以使用`QByteArray::...
在IT领域,字符串是编程中常见且重要的数据类型,用于表示和处理文本信息。VB(Visual Basic)是一种经典的、基于事件驱动的编程语言,由微软公司开发,它提供了丰富的库函数和工具,使得生成各种字符串操作变得简单...
在西门子PLC编程中,字符串通常表示为“STRING”类型,它由一系列字符组成,可以包含数字、字母和其他字符。而实数则表示为“REAL”类型,用于存储浮点数值。在处理来自传感器、人机界面(HMI)或其他系统的输入时,...
在C++编程中,字符和字符串的处理是至关重要的,特别是在处理不同的字符集时,如宽字符和多字符集。标题和描述中提到的关键概念包括LPTSTR、LPCSTR、LPCTSTR和LPSTR,这些都是在Windows API中常见的字符串类型指针。...
在IT领域,特别是编程语言如C中,字符串(串)是一种基本的数据结构,用于处理文本信息。堆存储是实现字符串的一种高效方式,特别是在处理大字符串时。以下将详细阐述堆存储表示的串及其基本操作: 1. **初始化串**...
字符串是由Unicode字符组成的序列,每个字符在计算机内部通常用16位(2个字节)来表示,可以是英文、数字、标点符号,甚至是中文等多语言字符。十六进制是一种逢16进1的方式,用于表示二进制数,它使用0-9和A-F这16...
1. 初始化:创建一个空的字典,通常用一个数组或哈希表表示,用于存储已编码的字符串及其对应的编码。 2. 输入处理:对于用户输入的任意字符串,将其转换为二进制形式。在Java中,这可以通过将每个字符转换为其ASCII...
2. 长度设置:用户可以指定生成字符串的最小和最大长度。 3. 模板选择:提供预设的常见模板,如邮箱地址、电话号码等,方便快速生成。 4. 重复次数:决定生成多少个符合规则的字符串。 5. 输出格式:可能支持多种...
定义一个二维数组dp[i][j]表示从索引i到j的子串是否在字符串中出现过。通过遍历字符串,更新dp数组,找到满足条件的最长子串。这种方法虽然直观,但在实际应用中可能会因为空间复杂度较高而不被首选。 在给出的...
C++的字符串通常使用`char*`或`std::string`表示。为了与C#兼容,我们通常选择`const char*`作为字符串类型,因为它更接近C的内存管理方式。在C++ DLL中,函数声明如下: ```cpp extern "C" __declspec(dllexport...