`
暴风雪
  • 浏览: 392335 次
  • 性别: 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

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

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

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

    随机生成32位字符串

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

    西门子PLC字符串转实数

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

    delphi 实现截取字符串中中文+英文混合截取

    在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...

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

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

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

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

    正则表达式随机生成字符串工具

    2. 长度设置:用户可以指定生成字符串的最小和最大长度。 3. 模板选择:提供预设的常见模板,如邮箱地址、电话号码等,方便快速生成。 4. 重复次数:决定生成多少个符合规则的字符串。 5. 输出格式:可能支持多种...

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

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

    C语言检测字符串是否为json字符串

    1. 字符串以大括号`{}`或方括号`[]`开始,表示一个对象或数组。 2. 对象由键值对组成,键和值之间用冒号`:`分隔,键值对之间用逗号`,`分隔。 3. 数组由值组成,值之间用逗号`,`分隔。 4. 键必须是双引号`"`包围的...

    从字符串中提取连续的字符数字转换为整数

    从字符串中提取连续的字符数字转换为整数 本文档将详细介绍从字符串中提取连续的字符数字转换为整数的方法,並提供了完整的源代码,适合于那些想要编码实现字符串中提取连续的字符数字转换为整数的同学。 知识点1...

Global site tag (gtag.js) - Google Analytics