`
暴风雪
  • 浏览: 393682 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[字符串最小表示法]hdoj 4162:Shape Number(解法2)

阅读更多

大致题意:

    见: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;
}
0
0
分享到:
评论

相关推荐

    字符串处理- 最大最小表示法.rar

    "最大最小表示法"是字符串处理中的一个概念,通常与排序、查找和优化存储相关。在此,我们将深入探讨这个主题。 最大最小表示法,也称为最小最大压缩(Min-Max Compression),是一种用于存储和检索有序或部分有序...

    最小表示法

    最小表示法,也被称为Morris-Pratt算法或者KMP预处理,是计算机科学中解决字符串匹配问题的一种高效方法。这个方法由C.A.R. Hoare在1968年首次提出,后来由Morris和Pratt进行了改进,主要用于优化Boyer-Moore算法和...

    算法文档无代码浅析“最小表示法”思想在字符串循环同构问题中的应用

    标题中提到的“最小表示法”是一种解决字符串问题的算法思想,特别是在处理字符串循环同构问题时非常有用。在深入了解之前,我们首先要明白几个基本概念。 字符串循环同构是指一个字符串可以被看作是另一个字符串的...

    最小表示法,周源ppt

    最小表示法是一种在字符串处理和算法竞赛中不太常见但非常经典的思想,主要用于解决字符串的循环同构问题。在本文中,我们将深入探讨最小表示法及其在解决特定问题上的应用。 循环同构指的是两个字符串可以通过有限...

    jvm如何处理长字符串

    jvm如何处理长字符串?java的classs文件中,constant_utf8_info的长度是u2,也就是说,一个字符串最长是65535个字节,但是,在本机做测试,超过这个长度的字符串也是允许的,原因是什么?

    最小表示法在字符串循环同构问题中的应用PPT学习教案.pptx

    本文档是一份PPT学习教案,旨在指导学习者通过最小表示法来应对字符串循环同构问题。 循环同构,顾名思义,是指在对字符串执行循环移位操作后能够得到另一个字符串的情况。例如,字符串"s1 = 'a b c d'"经过一次...

    最小表示法 ioi2003 周源

    最小表示法 ioi2003 周源

    labview字符串拆分到数组 支持中文1

    在LabVIEW中,数据主要通过数据类型表示,字符串可以以单个字符串或字符串数组的形式存在。字符串数组允许我们存储多个独立的字符串,每个字符串都有自己的索引。拆分后的子字符串通常会存储在一个字符串数组中。 ...

    算法合集之浅析最小表示法思想在字符串循环同构问题中的应用PPT学习教案.pptx

    最小表示法的目的是找到一个字符串的最小循环串,这个循环串可以代表整个字符串的特性。为了找到这个循环串,我们需要比较字符串的不同排列组合,选择出最小的那一个。这需要借助于一些高效的数据结构和算法技巧,...

    字符串处理必做题解析

    2. **字符串变量的定义与初始化**:掌握如何在C语言中正确地定义与初始化字符串变量。 3. **字符串操作**:学习常见的字符串操作方法,如比较、输入/输出等。 4. **错误处理**:了解常见的字符串操作错误,并学会...

    QT 收到下位机16进制数转换字符串显示

    2. **数据解析**:接收到的数据可能以字符串形式返回,比如"0x1A",或者直接作为整数类型。如果为字符串,需要进行预处理,去除前缀"0x",然后将剩余的16进制字符转换成对应的十进制数值。你可以使用`QByteArray::...

    随机生成32位字符串

    在IT领域,字符串是编程中常见且重要的数据类型,用于表示和处理文本信息。VB(Visual Basic)是一种经典的、基于事件驱动的编程语言,由微软公司开发,它提供了丰富的库函数和工具,使得生成各种字符串操作变得简单...

    西门子PLC字符串转实数

    在西门子PLC编程中,字符串通常表示为“STRING”类型,它由一系列字符组成,可以包含数字、字母和其他字符。而实数则表示为“REAL”类型,用于存储浮点数值。在处理来自传感器、人机界面(HMI)或其他系统的输入时,...

    (资料大全加程序)C++ 字符串之间的相互转化 宽字符与多字符集(LPTSTR、LPCSTR、LPCTSTR、LPSTR)

    在C++编程中,字符和字符串的处理是至关重要的,特别是在处理不同的字符集时,如宽字符和多字符集。标题和描述中提到的关键概念包括LPTSTR、LPCSTR、LPCTSTR和LPSTR,这些都是在Windows API中常见的字符串类型指针。...

    bat截取字符串

    这里,`str:~0,2` 表示从变量 `str` 的第0个字符开始截取2个字符。 #### 2. 截取字符串的后几个字符 同样地,如果需要截取字符串的最后几个字符,可以通过负数索引来实现: ```bat echo 最后一个字符为 %str:~-1% ...

    串的基本操作堆存储表示:初始化串、复制串、判断串是否为空、比较两个字符串、计算字符串长度、清空串、连接串、找子串、模式匹配、替换子串、插入和删除子串

    在IT领域,特别是编程语言如C中,字符串(串)是一种基本的数据结构,用于处理文本信息。堆存储是实现字符串的一种高效方式,特别是在处理大字符串时。以下将详细阐述堆存储表示的串及其基本操作: 1. **初始化串**...

    C# 字符串转十六进制串,16进制反向转回原字符串

    字符串是由Unicode字符组成的序列,每个字符在计算机内部通常用16位(2个字节)来表示,可以是英文、数字、标点符号,甚至是中文等多语言字符。十六进制是一种逢16进1的方式,用于表示二进制数,它使用0-9和A-F这16...

    LZ78算法实现对任意字符串的压缩与解压

    1. 初始化:创建一个空的字典,通常用一个数组或哈希表表示,用于存储已编码的字符串及其对应的编码。 2. 输入处理:对于用户输入的任意字符串,将其转换为二进制形式。在Java中,这可以通过将每个字符转换为其ASCII...

    求字符串中出现相同且长度最长字符串

    定义一个二维数组dp[i][j]表示从索引i到j的子串是否在字符串中出现过。通过遍历字符串,更新dp数组,找到满足条件的最长子串。这种方法虽然直观,但在实际应用中可能会因为空间复杂度较高而不被首选。 在给出的...

    03 C#与C++dll互相传递字符串.rar

    C++的字符串通常使用`char*`或`std::string`表示。为了与C#兼容,我们通常选择`const char*`作为字符串类型,因为它更接近C的内存管理方式。在C++ DLL中,函数声明如下: ```cpp extern "C" __declspec(dllexport...

Global site tag (gtag.js) - Google Analytics