信息竞赛进阶指南--最小表示法
int n = strlen(s + 1); for (int i = 1; i <= n; i++) s[n+i] = s[i]; int i = 1, j = 2, k; while (i <= n && j <= n) { for (k = 0; k < n && s[i+k] == s[j+k]; k++); if (k == n) break; // s likes "aaaaa" if (s[i+k] > s[j+k]) { i = i + k + 1; if (i == j) i++; } else { j = j + k + 1; if (i == j) j++; } } ans = min(i, j);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步