hdu3374
题意:
给你一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串
题解:
利用最小表示法与最大表示法O(n)复杂度求出最小字典序和最大字典序串出现位置,然后利用kmp求出next,利用next数组性质求出循环节次数,因为最小和最大字典序串出现次数等于循环节次数(因为有几个循环节,我们就会有几个最小串或最大串的起始点)

#include<bits/stdc++.h>
using namespace std;
const int maxn=2000005;
int nxt[maxn];
char s[maxn];
int n;
int getmin()
{int i=0,j=1,k=0;while(i<n&&j<n&&k<n){int t=s[(i+k)%n]-s[(j+k)%n];if(t==0)k++;else{if(t>0) i=i+k+1;else j=j+k+1;if(i==j) j++;k=0;}}return min(i,j);
}
int getmax()
{int i=0,j=1,k=0;while(i<n&&j<n&&k<n){int t=s[(i+k)%n]-s[(j+k)%n];if(t==0) k++;else{if(t>0)j=j+k+1;else i=i+k+1;if(i==j)j++;k=0;}} return min(i,j);
}
void getnxt()//注意:不同的getnext写法要注意区分,否则就会错
{int i=0,j=-1;nxt[0]=-1;while(i<n){if(j==-1||s[i]==s[j]){i++;j++;nxt[i]=j;}else{j=nxt[j];}}
}
void GetNex(){memset(nxt,0,sizeof(nxt));int j=-1;for(int i=0;s[i];i++){while(s[i]!=s[j+1]&&j!=-1)j=nxt[j];if(s[i]==s[j+1]&&i!=0)j++;nxt[i]=j;}
}int main()
{while(scanf("%s",s)!=EOF){n=strlen(s);int mi=getmin();int mx=getmax();getnxt();int sum=0;if(s[n-1]==s[nxt[n-1]]){sum=n-(nxt[n-1]+1);}else{sum=n-(nxt[n-1]);}if(n==1){printf("1 1 1 1\n");}else{int ko=1;if(n%sum==0){ko=n/sum;}else{ko=1;}printf("%d %d %d %d\n",mi+1,ko,mx+1,ko);}}return 0;
}

HDU - 3374(最小表示法+最大表示法)相关推荐

  1. HDU 3374 最小 / 大表示法

    题意 传送门 HDU 3374 String Problem 题解 求字符串中字典序最小与最大的循环同构串,并求解对应的起始字符在原字符串中出现的位置最早的一个,以及这个循环同构串出现的次数. 最小/ ...

  2. 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★

    文章目录 一.运输规划模型 1.产销平衡模型 2.产销不平衡模型 二.运输规划数学模型变量个数 三.表上作业法 四.表上作业法 : 求初始基可行解 1.最小元素法 2.差额法 ( Vogel ) 推荐 ...

  3. 方根法公式_仓储管理笔记之库存分析法:ABC分析法、区域合并法......

    导读 国内有庞大的仓储物流从业人员队伍(根据中国物流与采购联合会的调查,2016年底我国物流从业人员5012万,是人员增速最快的行业),很多人只是想深入了解仓库从无序到有序,从源头开始应该如何管理.如 ...

  4. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  5. C语言中数组的排序算法详解——选择法、冒泡法、交换法、插入法、折半法

    选择法排序 选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序.从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,然后将第二个数字与剩下数字中最 ...

  6. 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程

    欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...

  7. C语言排序之冒泡法(起泡法)

    C语言排序之冒泡法(起泡法)@C语言排序之冒泡法(起泡法) 冒泡的本质还是两两比较,第一次把最大或最小的选出来,第二次把老二选出来,这样的话就会少比一次,就这样循环下去就行啦,无非就是循环的嵌套,下面 ...

  8. 软件测试 通用技术03 测试用例 黑盒测试用例设计方法 等价类划分法 边界值分析法 判定表法 场景法 功能图法 其他用例设计方法 用例设计方法综合选择

    文章目录 1 测试用例 1.1 测试用例的定义 1.2 测试用例模板 1.3 测试用例模板的内容 测试用例编号 测试项 依赖用例 测试步骤 测试数据 预期结果 测试结果 测试人 备注 2 测试用例编写 ...

  9. 使用c语言测试大端和小端,C语言*符号使用及大端法小端法测试

    工具:Microsoft Visual C++ 6.0 例子: int a = 1; int* b = &a; C语言规定a表示存储单元中的数据,&a表示存储单元的地址,b存储的就是a ...

  10. 欧几里得算法/扩展欧几里得算法

    转载请说明出处:http://blog.csdn.net/leader_one/article/details/75222771 说在前面 出于尊重,简单介绍一下欧几里得(想了解更多自己百度去) 欧几 ...

最新文章

  1. snipaste滚动截图方法_电脑必备!这个截图神器比QQ截图更好用
  2. c# 连接Redis报错:WRONGTYPE Operation against a key holding the wrong kind of value:类型搞混弄出的错误...
  3. java.sql.sqlexception: 无效的名称模式:_PSQLException:错误:关系&ldquo; TABLE_NAME&rdquo;不存在...
  4. 刚发版就被客户购买,升级后的神策用户画像究竟有什么魔力?
  5. VTK:图片之ResizeImageDemo
  6. 客房收费系统数据库设计
  7. 虚拟机上使用ghost xp
  8. tomcat依赖导入步骤_Tomcat长生不老之术——嵌入式
  9. mysql 事务 隔离级别_MySQL的四种事务隔离级别
  10. 计算机 教育 初中 论文范文1000字,初中作文1000字
  11. Session丢失的解决办法小结(转)
  12. 话里话外:中小型装备制造企业竞争优势构建之路
  13. 开发工具篇 程序员计算器
  14. HDU 3533 BFS
  15. loj6388 「THUPC2018」赛艇 / Citing
  16. 女生句子简单干净霸气,适合女生霸气又很拽的句子
  17. 大数据——Flume组件Source、Channel和Sink具体使用
  18. ble4.2空口包详解(air interface packets)
  19. 用Proxifier只代理PC端部分软件
  20. Python Web 菜谱项目再次前进一步,从应用层了解内置用户认证系统

热门文章

  1. 鲲鹏服务器gpu型号,GPU服务器服务
  2. 用python爬取考研词汇及其近反义词与例句
  3. 产品造型设计上的加减法的运用
  4. 【VBA研究】用Ping命令测试IP地址是否通达
  5. 数据无界·存储无疆:大数据时代下,闪存已经势不可挡
  6. 【elasticsearch】【Kibana】7.6.2版本kibana启动失败master_not_discovered_exception
  7. 商家入驻平台系统方案介绍
  8. 解决Homebrew报错Error: Failure while executing;
  9. 高德地图zoom设置为小数
  10. 学生学习时长统计--python程序设计