Brief Description

给定一个数列,您每次可以把数列的最前面的数或最后面的数移动到新数列的开头,使得新数列字典序最小。输出这个新序列。

Algorithm Design

首先我们可以使用贪心得到一个\(O(n^2)\)的算法。

然后我们可以使用后缀数组把这个题目做成\(\Theta(nlogn)\)(倍增)或者\(\Theta(n)\)(DC3)

不过这个题目数据太水,第一种方法就可以水过了,简直坑。

Code

#include <algorithm>
#include <cstdio>
const int maxn = 30010 << 1;
int n, p, q, pp, qq, k;
int v[maxn], a[maxn], sa[2][maxn], rank[2][maxn];
void getsa(int sa[maxn], int rank[maxn], int Sa[maxn], int Rank[maxn]) {
for (int i = 1; i <= n; i++)
v[rank[sa[i]]] = i;
for (int i = n; i >= 1; i--)
if (sa[i] > k)
Sa[v[rank[sa[i] - k]]--] = sa[i] - k;
for (int i = n - k + 1; i <= n; i++)
Sa[v[rank[i]]--] = i;
for (int i = 1; i <= n; i++)
Rank[Sa[i]] = Rank[Sa[i - 1]] + (rank[Sa[i - 1]] != rank[Sa[i]] ||
rank[Sa[i - 1] + k] != rank[Sa[i] + k]);
}
void da() {
p = 0, q = 1, k = 1;
for (int i = 1; i <= n; i++)
v[a[i]]++;
for (int i = 1; i <= 26; i++)
v[i] += v[i - 1];
for (int i = 1; i <= n; i++)
sa[p][v[a[i]]--] = i;
for (int i = 1; i <= n; i++)
rank[p][sa[p][i]] =
rank[p][sa[p][i - 1]] + (a[sa[p][i]] != a[sa[p][i - 1]]);
while (k < n) {
getsa(sa[p], rank[p], sa[q], rank[q]);
p ^= 1;
q ^= 1;
k <<= 1;
}
}
void solve() {
int l = 1, r = n >> 1, cnt = 0;
while (l != r) {
pp = a[l], qq = a[r];
if (pp != qq) {
if (pp < qq) {
printf("%c", pp + 'A' - 1);
l++;
} else {
printf("%c", qq + 'A' - 1);
r--;
}
cnt++;
} else {
int r1 = rank[p][l], r2 = rank[p][n - r + 1];
if (r1 < r2) {
printf("%c", pp + 'A' - 1);
l++;
} else {
printf("%c", qq + 'A' - 1);
r--;
}
cnt++;
}
if (cnt == 80) {
printf("\n");
cnt = 0;
}
}
printf("%c", a[l] + 'A' - 1);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input", "r", stdin);
#endif
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
char ch[10];
scanf("%s", ch);
a[i] = ch[0] - 'A' + 1;
a[n * 2 - i + 1] = a[i];
}
n <<= 1;
da();
solve();
}

最新文章

  1. svn客户端重新设置用户名和密码
  2. Sharepoint学习笔记—ECM系列--文档集(Document Set)的实现
  3. bzoj 1031 [JSOI2007]字符加密Cipher
  4. js前端实现模糊查询
  5. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
  6. Pycharm设置
  7. State Threads——异步回调的线性实现
  8. Reverse Linked List | &amp; ||
  9. 10件在PHP 7中不要做的事情
  10. 插入随机数到MySQL数据库
  11. Hbase之取出行数据指定部分+版本控制(类似MySQL的Limit)
  12. DotNetBar v12.7.0.10 Fully Cracked
  13. iOS 开发问题集锦(三)
  14. HttpURLConnection传JSON数据
  15. Your project path contains non-ASCII characters
  16. PHP 获取数组是几维数组
  17. Spring Cloud 各组件调优参数
  18. winform closing事件注册
  19. hdu4073 Lights
  20. php实现远程网络文件下载到服务器指定目录(方法一)

热门文章

  1. JS 客户端检测
  2. 【题解搬运】PAT_A1016 Phone Bills
  3. React开发时候注意点
  4. Selenide 简单实现自动化测试
  5. restAssured + TestNG测试接口,以下是一个get 请求。
  6. SDOI2013森林
  7. 切换pip源的简便方法
  8. 5.爬虫 requests库讲解 高级用法
  9. Python图像全屏显示
  10. CE-HTML简介