博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3581
阅读量:4204 次
发布时间:2019-05-26

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

题意:将一个数列分成连续的三段,每段必须有数字,问这三段反转后的数列的最小字典序的方案,并输出,注意:第一个数比后面所有都大

思路:因为第一个数最大,那么将整个数列反转后的字典序最小的后缀为第一段分开位置,但是要判断情况,如最后还要至少剩下两个数完成后两段,接下来找第二段的分开位置,不可以像刚刚那么找了,想这个例子,将第一段去掉后是这样的,1 3 2 1 100 如果和第一次一样的方法结果是1 100 1 2 3 ,但是应该是1 2 3 1 100,前四个为第二段,那么给如何处理,机智的人总是有办法,不是我(/ □ \),将这段反转,再加上一段这样的反转,还是上面的例子,变成这样100 1 2 3 1 100 1 2 3 1,然后求后缀数组,确定第二个分开位置,如果从第二个1分开,则它到倒数第二个位置的串就为原序列要求的结果,显然它不是最优,最优的是第一个1开始,为1 2 3 1 100 ,这就是为什么加上两次的原因

//poj 3581const int maxn = 200010;const int inf = 0x3f3f3f3f;int n,k;int rank1[maxn*2],tmp[maxn*2],sa[maxn*2],rev[maxn*2];int str[maxn],ans[maxn];bool compare_sa(int i,int j){    if(rank1[i] != rank1[j])        return rank1[i]
<= n? rank1[i+k] : -1; int rj = j+k <= n? rank1[j+k] : -1; return ri < rj; }}void construct_sa(int *str1){ for(int i=0;i<=n;i++) { sa[i] = i; rank1[i] = i
=1&&nn-pos1>=2) break; } for(int i=pos1-1;i>=0;i--) printf("%d\n",str[i]); int kk=0; for(int i=nn-1;i>=pos1;i--) rev[kk++]=str[i]; for(int i=nn-1;i>=pos1;i--) rev[kk++]=str[i]; n=kk; construct_sa(rev); for(int i=0;i<=n;i++) { pos2 = pos1+n/2-sa[i]; if(pos2-pos1>=1&&nn-pos2>=1) break; } for(int i=pos2-1;i>=pos1;i--) printf("%d\n",str[i]); for(int i=nn-1;i>=pos2;i--) printf("%d\n",str[i]); //std::cout << "Hello, World!\n"; return 0;}

转载地址:http://tjali.baihongyu.com/

你可能感兴趣的文章
手工挂载VMware共享目录
查看>>
【Kernel】pid 与 tgid
查看>>
【Error】make LKM时 找不到符号
查看>>
【转载】【C语言】浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t
查看>>
【转载】yum update 自动忽略内核更新
查看>>
【maven】打包jar上传到服务器运行
查看>>
关闭centos wayland
查看>>
【Error】chsh: PAM: Authentication failure
查看>>
【Error】zsh历史记录丢失
查看>>
解析漏洞总结
查看>>
有趣的二进制 读书笔记
查看>>
记一次vmware磁盘扩容part2:真正扩展根目录
查看>>
【Error】zsh: corrupt history file /home/myusername/.zsh_history
查看>>
记一次编译linux 2.6 和4.10内核源码
查看>>
【Error】couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) [duplicate]
查看>>
qemu 文件系统制作:自己制作根目录和应用程序 + busybox
查看>>
关闭CSDN广告必备插件:adblock plus
查看>>
【pwnable.kr】fd
查看>>
【pwnable.kr】 collision
查看>>
【pwnable.kr】bof
查看>>