ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; int nn, n, rnk[60005], tmp[60005], cnt[60005], m=128, p, saa[60005]; char s[15], ss[60005]; void sasort(){ for(int i=0; i<m; i++) cnt[i] = 0; for(int i=…
P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold我比赛的时候A了,luogu上25分,QAQ,又憨又傻的200+代码,我为什么要干电脑干的事情,无语了.如果左边<右边,取左如果右边<左边,取右如果相等,就向中间找,直到找到第一个不同的,然后给电脑指明下一步是取队首或队尾取就行了. AC代码: #include<iostream> #include<cstdio> #include<queue> #include<…
P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold 题意 给一个字符串,每次可以从两边中的一边取一个字符,要求取出的字符串字典序最小 可以Hash+二分 也可以SA 首先贪心选字典序小的 然后遇到相等的了比Rank数组,把原串倍长一下就可以比了. Code: #include <cstdio> #include <algorithm> const int N=6e4+10; char s[N],ans[N]; int sa[N],Rank[N]…
Portal Description 给出一个字符串\(s(|s|\leq3\times10^4)\),每次从\(s\)的开头或结尾取出一个字符接在新字符串\(s'\)的末尾.求字典序最小的\(s'\). Solution 设当前剩余的字符串为\(t\),将其翻转得到\(t'\).则\(t<t'\)时取开头,否则取结尾. 令\(p=lcp(t,t')\),则有\(t<t' \Leftrightarrow t[1..p]=t'[1..p],t[p+1]<t'[p+1]\).那么最优的取法必…
传送门 数据小的话贪心就行. 可以把这个串翻转再接到后面,再求后缀数组,求出 rank 数组就很简单了. ——代码 #include <cstdio> #include <iostream> #define N 60001 , sum; int buc[N], x[N], y[N], sa[N], rank[N]; char s[N]; inline void build_sa() { int i, k, p; ; i < m; i++) buc[i] = ; ; i <…
思路大概和其他的题解一样: 从当前字符串最前面,最后面选一个字典序较小的然后拉到一个新的字符串序列中,如果相同就一直往中间扫描直到发现不同为止(一个字符如果被选中之后那么就不可以再次选择了),所以我们左右各设一个指针扫描就好了,不需要递归. -- WuPengrui_666 此题解终结--诶等一下!84分是怎么回事! 哦,对了,数据被加强了 这里的题解都比较古老--都在数据被增强之前写的 那--我们谈一下正(you)确(hua)解(bao)法(li) 朴素暴力最坏可以达到\(O(n^2)\),就…
最好的牛线,金 时间限制: 5000MS   内存限制: 65536K 提交总数: 5917   接受: 2048 描述 FJ即将把他的ñ(1≤ ñ ≤30,000)头牛竞争一年一度的"年度农民".在这个比赛中,每个农民都把他的牛排成一行,并把他们放在法官面前. 比赛组织者今年通过了一个新的注册方案:只要按照他们将要出现的顺序(即,如果FJ依次注册贝西,西尔维娅和多拉,他只注册BSD)登记每头牛的首字母.注册阶段结束后,按照奶牛姓名首字母的字符串,按增加的字典顺序对每个组进行判断. F…
Description FJ is about to take his N (1 ≤ N ≤ 30,000) cows to the annual"Farmer of the Year" competition. In this contest every farmer arranges his cows in a line and herds them past the judges. The contest organizers adopted a new registration…
题目 POJ 3617 和 这道题题目一样,只是范围稍稍再小一点. //模拟试试 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ][]; bool bijiao(int st,int ed) { if(st==ed) return true; ]<s[ed][]) return true; ]>s[ed][]) return false; else…
[题意] [分析] 后缀数组水题,嗯,不认真看输出像我一样就会被坑.. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define Maxn 300010 ]; ]; int len,n; ],rk[Maxn*],sa[Ma…