Problem description
  小明是个非常优秀的同学。他除了特别公正外,他也非常细心,当然老师肯定也知道,这不,老师又有事情找他帮忙了。老师每周都会给他一个字符串A。然后问小明“A字符串的循环移位产生的全部字符串中,字典序最小的是哪个”。于是小明屁颠屁颠的一个一个比对,可是长久下来,小明实在是受不了了,所以他想请你帮帮他。

相同,你帮他解决。你就会多AC一个题目。 

Hint:

假设A字符串为bcda,那么其全部的循环移位的新字符串有cdab。dabc,abcd。和他自己bcda一共四个,然后在这四个中。字典序最小的为abcd,那么输出这个字符串中的第一次字符在原字符串中的位置。为3,假设有多个结果,输出数字最小的。 

Input
  输入有T组, 以后每组第一行有一个字符串S。长度<=5000000,都是小写字母。
Output
  对于每个case。输出结果。
Sample Input
4
bcda
aaa
a
adab
Sample Output
3
0
0
2
Problem Source

HUNNU Contest

//i,j一開始指向第一和第二个字符,k代表i,j開始的字符串最长匹配的长度

比如 abcdabbcabdc

第一个a位置为0,第二个a位置为4。第三个位置为8

如果i=0,j=4的时候(这里我们仅仅是如果的一个中间过程)

l相应字符相等,k=1

那么i+k,j+k就是第二个位置,也相等。k=2,匹配长度为2

可是第三个 s[i+k]>s[j+k]

那么两者比較的字典序最小的是j所指的位置,j要保留。i肯定不是字典序最小的,所以i直接偏移到i+k的后面去

反之亦然

最后我们找i,j最小的就可以

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
#include <time.h>
using namespace std; #define LS 2*i
#define RS 2*i+1
#define UP(i,x,y) for(i=x;i<=y;i++)
#define DOWN(i,x,y) for(i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define gcd(a,b) __gcd(a,b)
#define LL long long
#define N 100000
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define EXP 1e-8 char str[5000005]; int main()
{
int i,j,k,len,minn,t;
scanf("%d",&t);
while(t--)
{
scanf("%s",str);
len = strlen(str);
i = 0,j = 1,k = 0;
while(i<len&&j<len&&k<len)
{
int t = str[(i+k)%len]-str[(j+k)%len];//取模解决循环移位
if(t==0) k++;//相等,匹配长度+1
else
{
if(t>0)
i+=k+1;//此时s[i+k]>s[j+k]。i相应的位置肯定不是最大的串,直接移动到匹配子串末尾
else
j+=k+1;
if(i == j)//指向同一个位置,j偏移
j++;
k = 0;//匹配长度从0開始
}
}
printf("%d\n",min(i,j));
} return 0;
}

hunnu11544:小明的烦恼——找字符串的更多相关文章

  1. hunnu 小明的烦恼——找字符串

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 小明的烦恼——找字符串 ...

  2. hnuun 11544 小明的烦恼——找字符串(求环形字符串的最小最大字典序)

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 最小最大表示法: 求环 ...

  3. hunnu 11545小明的烦恼——找路径 (最大流)

    小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: ...

  4. hunnu - 11545 小明的烦恼——找路径 (最大流)

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11545 只是要求不经过相同的边,那么每次找出一条增广路T-- ...

  5. hunnu--11545--小明的烦恼——找路径

    小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users:  ...

  6. 【BZOJ】2760: [JLOI2011]小A的烦恼【字符串模拟】

    2760: [JLOI2011]小A的烦恼 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 406  Solved: 258[Submit][Statu ...

  7. 擅长排列的小明 II(找规律)

    擅长排列的小明 II 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2, ...

  8. hunnu11543:小明的烦恼——分糖果

    Problem description   小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非 ...

  9. 【贪心+堆】XMU 1584 小明的烦恼

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...

随机推荐

  1. 27.Qt时钟

    myclock.h #ifndef MYCLOCK_H #define MYCLOCK_H #include <QObject> #include <QLCDNumber> # ...

  2. category与协议的不同

    1,category是针对类进行扩展,而且该类必须有里面的所有成员 协议不同可以选择性实现 2,category是针对一个具体的类实现,其他类没有 协议允许任何类使用,只要实现以后只能通过重写修改 3 ...

  3. 解析RecyclerView(2)——带顶部View和底部View的RecyclerView

    在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...

  4. windows中安装redis的phpredis扩展

    1. 下载php的redis扩展 打开网址 http://pecl.php.net/ (php的扩展库官网),搜索redis,进入地址:http://pecl.php.net/package/redi ...

  5. windows下安装reidis

    下载windows下redis安装包 https://github.com/MSOpenTech/redis/releases 这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了. 切换 ...

  6. js 手机号码简单正则校验

    现在手机号码的号段有如下几种,包括17年新发出的三个(166,199,198)号段. 在一些项目注册登录或者其他中,涉及到手机号进行一个简单的有效验证,在前端先进行一个简单的检验: 判断字符串是否符合 ...

  7. gdb usage

    list stack of all threads thread apply all bt

  8. CADisplayLink & NSTimer

    屏幕刷新与UI更新不同步:屏幕刷新由硬件(+GPU)保证,UI更新由软件(CPU保证). 出现卡顿的原因是软件的计算速度跟不上硬件的刷新速度. 一 简介 1 所在框架 CADisplayLink和其它 ...

  9. 【fiddler】 fiddler总是在菜单栏下面弹出提示“The system proxy was changed,click to reenable fiddler capture”--转

    源地址:http://blog.csdn.net/htdeyanlei/article/details/52873060 标签: fiddler 2016-10-20 15:28 2747人阅读 评论 ...

  10. 如何在使用layer.prompt在输入值为空的情况下点击确定继续执行逻辑?

    突然发现在使用LayUI时,用到弹出层layer.prompt时,如果文本框输入值是空的话点击确定没有反应,不能向下执行. 但是我又需要在这种情况下去继续执行判断或逻辑时该怎么做?? 示例:原代码如下 ...