博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小表示法
阅读量:6161 次
发布时间:2019-06-21

本文共 2208 字,大约阅读时间需要 7 分钟。

不知道为什么用算法竞赛进阶指南上的那个代码交上去会WA

#include
#include
#include
#define REP(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)using namespace std;const int MAXN = 2e4 + 10;char a[MAXN];int n;int main(){ int T; scanf("%d", &T); while(T--) { scanf("%s", a + 1); n = strlen(a + 1); _for(i, 1, n) a[n + i] = a[i]; int i = 1, j = 2, k; while(i <= n && j <= n) { for(k = 0; k <= n && a[i+k] == a[j+k]; k++); if(k == n) break; if(a[i+k] > a[j+k]) { i += k + 1; if(i == j) i++; } else { j += k + 1; if(i == j) j++; } } printf("%d\n", min(i, j)); } return 0;}

正解在i == j只有j++。我自己是觉得没有什么区别的,迷。

AC代码

#include
#include
#include
#define REP(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)using namespace std;const int MAXN = 2e4 + 10;char a[MAXN];int n;int main(){ int T; scanf("%d", &T); while(T--) { scanf("%s", a + 1); n = strlen(a + 1); _for(i, 1, n) a[n + i] = a[i]; int i = 1, j = 2, k; while(i <= n && j <= n) { for(k = 0; k <= n && a[i+k] == a[j+k]; k++); if(k == n) break; if(a[i+k] > a[j+k]) i += k + 1; else j += k + 1; if(i == j) j++; } printf("%d\n", min(i, j)); } return 0;}

好水。就处理出最小表示然后比较就好了。

#include
#define REP(i, a, b) for(register int i = (a); i < (b); i++)#define _for(i, a, b) for(register int i = (a); i <= (b); i++)using namespace std;const int MAXN = 1e6 + 10;char a[MAXN], b[MAXN], t[MAXN];int n;void deal(char* s){ int k, i = 1, j = 2; _for(i, 1, n) s[n + i] = s[i]; while(i <= n && j <= n) { for(k = 0; k <= n && s[i + k] == s[j + k]; k++); if(k == n) break; if(s[i + k] > s[j + k]) i += k + 1; else j += k + 1; if(i == j) j++; } int p = min(i, j); _for(i, 1, n) t[i] = s[p + i - 1]; _for(i, 1, n) s[i] = t[i];}int main(){ scanf("%s%s", a + 1, b + 1); n = strlen(a + 1); deal(a); deal(b); bool ok = true; _for(i, 1, n) if(a[i] != b[i]) { ok = false; break; } if(ok) { puts("Yes"); _for(i, 1, n) putchar(a[i]); puts(""); } else puts("No"); return 0;}

 

转载于:https://www.cnblogs.com/sugewud/p/9819309.html

你可能感兴趣的文章
简析IP视频监控图像处理芯片介绍及应用
查看>>
C#获取IP和整数IP方法
查看>>
springmvc + excel代
查看>>
南阳OJ 16 矩形嵌套
查看>>
Swift - 19 - 字典的初始化
查看>>
分析app和wap手机网站的不同
查看>>
终端命令别名
查看>>
io cache
查看>>
AchartEngine绘图引擎
查看>>
(笔记)Mysql命令create table:创建数据表
查看>>
IOS-多线程
查看>>
手把手教你如何把本地文件传到服务器,如何映射
查看>>
Spring Session Redis
查看>>
Android Studio IDE Out of Memory
查看>>
EF框架step by step(1)—Database-First
查看>>
算法笔记之高速排序
查看>>
使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
查看>>
一个网络传输框架——zeroMQ 调研笔记
查看>>
HDU ACM 1046 Gridland 找规律
查看>>
[C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
查看>>