poj 1509 Glass Beads

来源:互联网 发布:遗传算法求八皇后问题 编辑:程序博客网 时间:2024/05/16 06:14

链接:点击打开链接

给你一个字符串,把看成一个圆串,从哪里拆开,可以使整个字符串的字典序最小,输出拆开那个字母的位置。

最小表示法:

对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。

#include <iostream>#include <cstring>#include<algorithm>using namespace std;/*用最小表示法求字符串S的最小字典序返回字典序最小的串的首字母位置*/int MinimumRepresentation(char *s, int l){    int i = 0, j = 1, k = 0, t;    while(i < l && j < l && k < l) {        t = s[(i + k) >= l ? i + k - l : i + k] - s[(j + k) >= l ? j + k - l : j + k];        if(!t) k++;        else{            if(t > 0) i = i + k + 1;            else j = j + k + 1;            if(i == j) ++ j;            k = 0;        }    }    return (i < j ? i : j);}int main(){int n,len;char pat[10010];    scanf("%d",&n);while(n--){scanf("%s",pat);len=strlen(pat);printf("%d\n",MinimumRepresentation(pat,len)+1);}  return 0;}


原创粉丝点击