如何用 Lyndon 无脑构造
QOJ9729 Dividing Sequence
给定序列
,把它划分成两个子序列 ,要求字典序 ,求字典序最小的 。
字典序问题,可以在 Lyndon 分解上考虑,设分解得到
考虑第一个字符分给谁,如果分给
而这样显然不优(令
可以发现
所以不妨先把
若
原题
#include <cstdio>
#include <cstring>
int T, n, a[5050], w[5050], p[5050], Z[5050];
int main()
{
scanf("%d", &T);
while (T--)
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", a + i);
int i = 1, j, k, c = 0, d = 0, o = 0;
while (i <= n)
{
j = i + 1, k = i;
while (j <= n)
{
if (a[j] == a[k])
++j, ++k;
else if (a[j] > a[k])
++j, k = i;
else
break;
}
++d;
while (i <= k)
w[++c] = i, p[c] = d, i += j - k;
}
w[c + 1] = n + 1, p[c + 1] = -1;
for (int i = 1; i <= c; i += 2)
{
for (int j = w[i]; j < w[i + 1]; ++j)
Z[++o] = a[j];
if (p[i] != p[i + 1])
break;
}
printf("%d\n", o);
for (int i = 1; i <= o; ++i)
printf("%d ", Z[i]);
puts("");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具