博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5442 Favorite Donut 最大表示法+KMP
阅读量:4954 次
发布时间:2019-06-12

本文共 1142 字,大约阅读时间需要 3 分钟。

题目链接:

题意:

有一个由小写字母组成的字符串(长度为n),首尾相接,求顺时针转和逆时针转的情况下,长度为n的最大字典序的字符串的首位的位置。

如果顺时针和逆时针求得的字符串相同,则选择开始位置较前的,如果开始位置也相同,则选择顺时针的。

如abcd,那么顺时针可以是abcd,bcda,cdab,dabc.逆时针可以是adcb,dcba,cbad,badc.

 

思路:

顺时针的情况下,直接求最大字典序的位置。逆时针的情况下,由于求最大字典序的串与原串对应位置的编号发生变化,

所以求得位置后,得到字典序最大的字符串,再用kmp找出该字符串在母串中出现的所有位置,取最靠前的位置。

然后把顺时针和逆时针的情况进行比较。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int n; 7 char S[20010*2]; 8 int Next[1000005]; 9 char P[20010*2]; 10 int idb[20010*2]; 11 int bpos1; 12 void getNext(char* S,int* Next){ 13 int n=strlen(S); 14 Next[0]=Next[1]=0; 15 for(int i=1; i
0) j+=k+1; 52 else i+=k+1; 53 if(i==j) j++; 54 k=0; 55 } 56 } 57 return i
b) printf("%d %d\n", apos+1, 0); 98 else if(a < b) printf("%d %d\n", bpos1+1, 1); 99 else100 {101 if(apos1 <= bpos1) printf("%d %d\n", apos1+1, 0);102 else printf("%d %d\n", bpos1+1, 1);103 }104 105 }106 return 0;107 }

 

转载于:https://www.cnblogs.com/titicia/p/4815348.html

你可能感兴趣的文章
正向dns脚本
查看>>
dns等服务器搭建
查看>>
laravel soap
查看>>
MySQL 无法启动,出现 “发生系统错误 1067。”
查看>>
(android实战)实现摇一摇功能
查看>>
python 中的map,dict,lambda,reduce,filter
查看>>
二、语言基础
查看>>
[恢]hdu 1030
查看>>
hihocoder-1142-三分求极值
查看>>
SNAT、DNAT、NPT
查看>>
git 10.8
查看>>
css实现div的高度填满剩余空间
查看>>
ES6(二) Destructuring-变量的解构赋值
查看>>
RestSharp.WindowsPhone调用Rest服务
查看>>
关于忘记Jenkins管理员密码的解决办法
查看>>
android 的四种枚举Context.MODE_PRIVATE
查看>>
网页javascript
查看>>
LDAP & implementation
查看>>
iOS - 类扩展与分类的区别
查看>>
AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking
查看>>