Favorite Donut(HDU 5442)最小表示法+二分
题目给出一个字符串,由a~z表示甜度,随字典序增大,字符串首尾相连形成一个圈,要求从一个位置开始字典序最大的字符串,输出位置以及是顺时针还是逆时针表示。顺时针用0表示,逆时针用1表示。
此题只需要查找字符串的最大字典序排列即可,模拟对字符串的翻转以及排列操作,可以用二分来查找位置来节省时间。
最小表示法模板:
int getmin(char *s){
int n=strlen(s);
int i=,j=,k=,t;
while(i<n && j<n && k<n){
t=s[(i+k)%n]-s[(j+k)%n];
if (!t) k++;
else{
if (t<) i+=k+;
else j+=k+;
if (i==j) j++;
k=;
}
}
return i<j?i:j;
}
将t<0改为t>0即可求最大字典序。
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std; char input[],s[];
int t,len; int getmin(char *s){
int n=strlen(s);
int i=,j=,k=,t;
while(i<n && j<n && k<n){
t=s[(i+k)%n]-s[(j+k)%n];
if (!t) k++;
else{
if (t<) i+=k+;
else j+=k+;
if (i==j) j++;
k=;
}
}
return i<j?i:j;
} int judge(int mid){
int pos;
for(int i=;i<len;i++)
s[i]=input[(mid+i)%len];
pos=getmin(s);
if(pos>len--mid) return ;///
else return ;
} int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%s",&len,input);
char s1[],s2[];
int start=getmin(input);
for(int i=;i<len;i++)
s1[i]=input[(start+i)%len];///从最小起点重构字符串
reverse(input,input+len);///翻转字符串
int start1=getmin(input);
for(int i=;i<len;i++)
s2[i]=input[(start1+i)%len];///从最小起点重构字符串
if(strcmp(s1,s2)>)
{printf("%d 0\n",start+);continue;}
int l=start1,r=len-,mid;
while(l<=r){
mid=(l+r)/;
if(judge(mid))
l=mid+;
else
r=mid-;
}
start1=r;
for(int i=;i<len;i++){
s2[i]=input[(start1+i)%len];
}
if(strcmp(s1,s2)<){
printf("%d 1\n",len-start1);continue;
}
else if(start<=len-start1){
printf("%d 0\n",start+);
}
else printf("%d 1\n",len-start1);
}
}
return ;
}
Favorite Donut(HDU 5442)最小表示法+二分的更多相关文章
- HDU 2609 最小表示法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意:给定n个循环链[串],问有多少个本质不同的链[串](如果一个循环链可以通过找一个起点使得和 ...
- HDU 4162 最小表示法
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4162 题意:给定一个只有0-7数字组成的串.现在要由原串构造出一个新串,新串的构造方法:相邻2个位置的数字 ...
- String Problem hdu 3374 最小表示法加KMP的next数组
String Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)
题目链接: Hdu 5442 Favorite Donut 题目描述: 给出一个文本串,找出顺时针或者逆时针循环旋转后,字典序最大的那个字符串,字典序最大的字符串如果有多个,就输出下标最小的那个,如果 ...
- hdu 5442 Favorite Donut 后缀数组
Favorite Donut Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid ...
- HDU 3374 最小/大表示法+KMP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给定一个串s,该串有strlen(s)个循环同构串,要求输出字典序最小的同构串的下标,字典 ...
- hdu String Problem(最小表示法入门题)
hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...
- HDU 4162 Shape Number(字符串,最小表示法)
HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[ ...
- HDU - 3374 String Problem (kmp求循环节+最大最小表示法)
做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. ...
随机推荐
- 常用正则表达式 c#
/// <summary> /// 是否手机号 /// </summary> /// <param name="str"></param& ...
- java实现二维码的生成.
目录 1.二维码概念 2.二维码发展历史 3.二维码分类 4.二维码优缺点 5.QR Code 1.二维码又称 二维条码 (2-dimensional bar code)是用某种特定的几何 ...
- Android反编译apk并重新打包签名(Mac环境)
工具下载 apktool :https://ibotpeaches.github.io/Apktool/install dex2jar:https://github.com/pxb1988/dex2j ...
- !/usr/bin/env python和!/usr/bin/python的区别
脚本语言第一行 作用:文件中代码用指定可执行程序运行 #!/usr/bin/Python 执行脚本时,调用/usr/bin下python解释器 #!/usr/bin/env python 在环境设 ...
- 简单hibernate框架测试
-jar包 -日志配置文件: -实体类: package cn.itcast.domain; public class Customer { private Long cust_id; //客户编号 ...
- Git clone出现SSL certificate problem
1 可以在cmd下,设置 git config --global http.sslVerify false git clone XXX 即可. 2 TortoiseGit设置 打开TortoiseG ...
- 实现简单的ssh功能
客户端代码: # -*- coding=utf-8 -*- __Author__ = "Dennis" import socket client = socket.socket() ...
- linux - man 提示:-bash: man: command not found
在执行man命令时,提示:-bash: man: command not found 原因1:没有配置path环境 解决:vi /etc/profile JAVA_HOME=/usr/java/jdk ...
- (转)ArcGIS Runtime for Android 使用异步GP服务绘制等值线
关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...
- Python机器学习(基础篇---监督学习(线性分类器))
监督学习经典模型 机器学习中的监督学习模型的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测.根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习与回归预测两类.监督学习任务的 ...