HDU 4333 [SAM WRONG!!!]
题意:给一个数字,每一次把它的最后一位拿到最前面,一直那样下去,分别求形成的数字小于,等于和大于原来数的个数。
SAM上就是走n步
相等好好做啊,但是大于小于不好做啊,用类似弦论的思想也不能处理出怎样才是正好n步走到
用LCP就要加一个log呜呜
只能去写扩展KMP了
http://blog.csdn.net/acdreamers/article/details/8313828
http://wenku.baidu.com/view/64ac5384b9d528ea81c779ed.html
http://acm.hdu.edu.cn/showproblem.php?pid=4333
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int N=2e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,ri[N],d[N];
char s[N];
struct State{
int ch[],par,val;
}t[N];
int sz=,root=,last=;
void extend(int c){
int p=last,np=++sz;
t[np].val=t[p].val+;ri[np]=;printf("np %d %d\n",np,c);
for(;p&&!t[p].ch[c];p=t[p].par) t[p].ch[c]=np;
if(!p) t[np].par=root;
else{
int q=t[p].ch[c];
if(t[q].val==t[p].val+) t[np].par=q;
else{
int nq=++sz;
t[nq]=t[q];t[nq].val=t[p].val+;
t[q].par=t[np].par=nq;
for(;p&&t[p].ch[c]==q;p=t[p].par) t[p].ch[c]=nq;
}
}
last=np;
}
void ini(){sz=root=last=;memset(t,,sizeof(t));}
int c[N],a[N];
void RadixSort(){
for(int i=;i<=sz;i++) c[i]=;
for(int i=;i<=sz;i++) c[t[i].val]++;
for(int i=;i<=sz;i++) c[i]+=c[i-];
for(int i=;i<=sz;i++) a[c[t[i].val]--]=i;
}
int L,E,G;
void Count(){
int u=root;
for(int i=;i<=n;i++){
int c=s[i]-'';
for(int j=;j<c;j++) L+=d[t[u].ch[j]];
for(int j=c+;j<;j++) G+=d[t[u].ch[j]];
u=t[u].ch[c];
}
E=ri[u];
}
void dp(){
RadixSort();
for(int i=sz;i>=;i--){
int u=a[i];
ri[t[u].par]+=ri[u];
//printf("hi %d %d %d %d\n",u,ri[u],t[u].val,t[t[u].par].val);
}
for(int i=sz;i>=;i--){
int u=a[i];
ri[u]= t[u].val>=n&&t[t[u].par].val<n?ri[u]:;
d[u]=ri[u];
printf("hi %d %d %d %d\n",u,ri[u],t[u].val,t[t[u].par].val);
for(int j=;j<;j++) d[u]+=d[t[u].ch[j]];
printf("d %d %d\n",u,d[u]);
}
L=E=G=;
Count();
}
int main(){
freopen("in","r",stdin);
int T=read(),cas=;
while(T--){
scanf("%s",s+);
n=strlen(s+);
ini();
for(int i=;i<=n;i++) extend(s[i]-'');
for(int i=;i<n;i++) extend(s[i]-'');
dp();
printf("Case %d: %d %d %d\n",++cas,L,E,G);
}
}
HDU 4333 [SAM WRONG!!!]的更多相关文章
- 萝卜招聘网 http://www.it9s.com 可以发布免费下载简历求职 ,免费!免费!全部免费!找工作看过来 免费下载简历 !
萝卜招聘网 http://www.it9s.com 可以发布免费下载简历求职 ,免费!免费!全部免费!找工作看过来 免费下载简历 !萝卜招聘网 http://www.it9s.com 可以发布 ...
- UWP开发随笔——UWP新控件!AutoSuggestBox!
摘要 要开发一款优秀的application,控件肯定是必不可少的,uwp就为开发者提供了各种各样的系统控件,AutoSuggestBox就是uwp极具特色的控件之一,也是相对于之前win8.1的ua ...
- 只显示 前100个字 java 实现截取字符串!使用! <c:if test="${fn:length(onebeans.info)>100 }">${ fn:substri
博客 文章 只显示 前100个字 java 实现截取字符串!使用! <c:if test="${fn:length(onebeans.info)>100 }">$ ...
- 案例:计算1!+2!+3!+......+n!
/* * 1!+2!+3!+......+n! * */ import java.util.Scanner; public class ForTest{ public static void main ...
- 窗口!窗口!- Windows程序设计(SDK)003
窗口!窗口! 让编程改变世界 Change the world by program 内容节选: 在前边两节课的例子中,我们通过 MessageBox 函数创建一个消息框程序,消息框其实就是用来跟用户 ...
- 序列!序列!- 零基础入门学习Python016
序列!序列! 让编程改变世界 Change the world by program 你可能发现了,小甲鱼把列表.元组和字符串放在一块儿来讲解是有道理的,我们发现Ta们之间有很多共同点: 1. 都可以 ...
- Swing Dance!摇摆舞!小组
Swing Dance!摇摆舞!小组 Swing Dance!摇摆舞
- 算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)
-(void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{ / ...
- CTF---隐写术入门第一题 SB!SB!SB!
SB!SB!SB!分值:20 来源: 西普学院 难度:中 参与人数:4913人 Get Flag:1541人 答题人数:1577人 解题通过率:98% LSB 解题链接: http://ctf5.sh ...
随机推荐
- Eclipse集成Tomcat的步骤,我已测试N次都是成功的
本文转自:https://www.cnblogs.com/weixing/p/3229983.html#undefined 使用Eclipse开发B/S结构Web应用时,必须使用Web应用服务器,常见 ...
- spring如何控制事务
Spring 的事务,可以说是 Spring AOP 的一种实现. AOP面向切面编程,即在不修改源代码的情况下,对原有功能进行扩展,通过代理类来对具体类进行操作. spring是一个容器,通过spr ...
- hash算法 (hashmap 实现原理)
Hash ,一般翻译做" 散列" ,也有直接音译为" 哈希" 的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出 ...
- keepalived VS zookeeper
转载请标明出处http://www.cnblogs.com/haozhengfei/p/e3db73cb83afb213a3bff43a850d56c4.html keepalived VS zook ...
- Responder Pro new version could analyze Win10 memory dump
My friend John acquired a memory dump from Windows 10, but he could analyze this memory dump with an ...
- dig命令
dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具.它执行 DNS 搜索,显示从受请求的域名服务器返回的答复.多数 DNS 管理员利用 dig 作为 DNS 问题的故障诊断, ...
- 本地apache 可以正常访问,lnmp服务器访问404错误
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; }
- Python3 的注释
单行注释 # 这是一个注释 print("Hello, World!") 多行注释 1:3个单引号 ''' 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用 ...
- Oracle问题之ORA-12560TNS:协议适配器错误
Oracle问题之ORA-12560TNS:协议适配器错误 一.造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个: 1.监听服务没有起起来.windows平台个一如下操作:开始-- ...
- 关于mybatis 注解sql sum(参数)传参写法
新手出道 验证了很久sum()里面带参数方式 #{参数}一直不行日志显示参数已经传进 但就是加不上去 返回的始终是0 后面换成$(参数)之后就行了 @Select("select sum($ ...