@comzyh
2015-07-25T07:14:17.000000Z
字数 558
阅读 1804
未分类
USACO 5.5.2
int get_min(char *s){int i = 0, j = 1;int len = strlen(s);while (i < len && j < len){// printf("i=%4d,j=%4d\n",i,j);if (s[i] < s[j % len])j++;else if (s[i] > s[j % len]){i = j;j = i + 1;}else{int k;for (k = 1; k < len && s[(i + k) % len] == s[(j + k) % len]; k++);if (k == len) //出现循环节return i;if (s[(i + k) % len] > s[(j + k) % len]){i = j;j = i + 1;}else{j = j + k + 1; // i .. j - 1 和 j 开头的都不是最小表示,}}}return i;}
POJ 1509
int min_p(const char *s){int len = strlen(s);int i = 0, j = 1, k;while (i < len && j < len){for (k = 0; k < len && s[(i + k) % len] == s[(j + k) % len]; k++);if (k == len)return i;if (s[(i + k) % len] > s[(j + k) % len])swap(i,j);j = max(i+1,j + k + 1);}return i;}
在此输入正文