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. Mediator Design Pattern 中介者模式

    就是设计一个Mediator类,能够处理其它类的关系. Mediator类: 1 拥有其它全部类的实例对象 2 设置一个接口供其它类使用,其它类也拥有一个Mediator类成员,仅仅需调用这个Medi ...

  2. C++实现位数组

    当我们遇到大量整数排序时候为了节省内存空间我们能够考虑使用bit数组来实现,缺点是其仅仅适用于正整数. 思想: 在32位系统一个int类型占4个字节,按位来计算一个int类型能够记录32个数.因此,採 ...

  3. poj1286 Necklace of Beads【裸polya】

    非常裸的polya,只是我看polya看了非常久 吉大ACM模板里面也有 #include <cstdio> #include <cmath> #include <ios ...

  4. 使用记事本开发第一个java程序

    记事本是开发java程序最基础的一个工具 第一步:编写 新建一个文件名为Hello的文本文档,并将文件扩展名改为.java. 在文本框内输入我们的程序代码 ——————————————我是分割线——— ...

  5. [BZOJ 3365] Distance Statistics

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3365 [算法] 点分治 [代码] #include <algorithm> ...

  6. DB-MySQL:MySQL 序列使用

    ylbtech-DB-MySQL:MySQL 序列使用 1.返回顶部 1. MySQL 序列使用 MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想 ...

  7. HTML、CSS和JS中注释类型的总结

    添加必要的注释,是一个优秀的程序员必须具备的好习惯,可以大大提高代码的可维护性.可读性. 1.HTML注释 <!--注释的内容--> 注释的地方(根据个人习惯可能有所不同): 结束标签的后 ...

  8. 枚举所有排列-STL中的next_permutation

    枚举排列的常见方法有两种 一种是递归枚举 另一种是STL中的next_permutation //枚举所有排列的另一种方法就是从字典序最小排列开始,不停的调用"求下一个排列"的过程 ...

  9. Neo4j沙盒实验申请过程步骤(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793632    (对此表示感谢) 前期博客 我暂时是将Neo4j ...

  10. 【转】如何使用windows的计划任务?计划任务?

    我们经常有一些程序想要过了几小时来运行:比如定时关机 或者说希望能够每天的几点执行一个什么程序: 这些所有的操作都需要用到windows的任务计划:或者叫计划任务:反正都一样 下面小编将指导大家创建一 ...