BZOJ4319: cerc2008 Suffix reconstruction Suffix Array 的理解
2015-11-22 09:03
363 查看
来源:http://blog.csdn.net/GEOTCBRL/article/details/49664947
本来是一点思路都没有的 可能是因为不怎么用Suffix Array 吧 一般都是用Suffix Automaton的。。
如果这一题自己做的话是可以加深对后缀数组的理解的。。。。
那我就直接厚脸皮的套别人结论了。。。
考虑sa的计算方式,然后贪心。
如果当前sa的下一位的rank大于下个sa的下一位的rank,那么下一位sa的字母应该比当前大,否则相同。
恩仔细想想是对的(误
那就是贪心了。。。。
本来是一点思路都没有的 可能是因为不怎么用Suffix Array 吧 一般都是用Suffix Automaton的。。
如果这一题自己做的话是可以加深对后缀数组的理解的。。。。
那我就直接厚脸皮的套别人结论了。。。
考虑sa的计算方式,然后贪心。
如果当前sa的下一位的rank大于下个sa的下一位的rank,那么下一位sa的字母应该比当前大,否则相同。
恩仔细想想是对的(误
#include<cstdio> using namespace std; char c; inline void read(int &a) { a=0;do c=getchar();while( c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); } int n; char ans[1000001]; int sa[1000001],rank[1000001]; int main() { int i,j,k; read(n); for(i=1;i<=n;i++) { read(sa[i]); if(rank[sa[i]]) goto error; rank[sa[i]]=i; } char t; ans[sa[1]]=t='a'; for(i=2;i<=n;i++) { if(rank[sa[i-1]+1]>rank[sa[i]+1]) ans[sa[i]]=++t; else ans[sa[i]]=t; if(ans[sa[i]]>'z') goto error; } for(i=1;i<=n;i++) putchar(ans[i]); goto ok; error: printf("-1"); return 0; ok: return 0; }
那就是贪心了。。。。
相关文章推荐
- 存储过程和触发器
- 5.1.4 datetime对象
- 5.1.4 datetime对象
- 网络流量监控工具iftop
- 浅谈.Net和Java互相调用的三种方式
- BZOJ 1316: 树上的询问 (点分治+set)
- 黑客丛林之旅 第十关
- 关于矩阵重复元素检测判断条件的粗陋看法
- linux下tar命令参数详解
- Mac终端编译运行C++
- matlab:cell的元素的调用—— acell(2)相比acell{2}
- C#调用java类、jar包方法
- Sailfish OS 开发商 Jolla 融资失败,裁员过半
- ASP.NET MVC- ActionFilter的使用
- JS实现别踩白块小游戏
- GoogleDoc - 温故而知新Activity生命周期方法
- 推荐个好用的安卓记事本便签软件
- matlab:把cell中的某个元素删去
- java API中Util包
- JQuery零碎知识点归纳