【BZOJ2882】工艺【最小表示法】

来源:互联网 发布:数据库模糊查询算法 编辑:程序博客网 时间:2024/04/29 05:24

原理证明看的http://blog.csdn.net/zy691357966/article/details/39854359


比较简单优美的算法,就找了个模板题做了下。


注意输出格式...否则PE


#include <cstdio>#include <algorithm>using namespace std;const int maxn = 600005;int n, s[maxn];inline int iread() {int f = 1, x = 0; char ch = getchar();for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';return f * x;}int MR() {int i = 0, j = 1;for(int k; i < n && j < n; ) {for(k = 0; k < n && s[i + k] == s[j + k]; k++);if(k == n) return i;if(s[i + k] > s[j + k]) i = i + k + 1;else j = j + k + 1;if(i == j) j++;}return min(i, j);}int main() {n = iread();for(int i = 0; i < n; i++) s[n + i] = s[i] = iread();int pos = MR();for(int i = 0; i < n - 1; i++) printf("%d ", s[pos + i]); printf("%d\n", s[pos + n - 1]);return 0;}


0 0
原创粉丝点击