传送门

我真是一个垃圾

模板题都不会做

模板题还要别人教

细节写法还要别人教

别人一分钟AC,教我算法还教我写法,最后写出来的别人算法还比我优秀一百倍

数据结构把脑子学傻了,看到题就想怎么用数据结构,半天做不来

别人1sAC,不是单调的么

纠结中间插啥子值,人家告诉我转为Int

最后还傻逼地写st表求lcp,人家直接单调队列

题读错了de半个晚上,还一直pe

mdzz,全世界都找不出第二个比我更蠢的人了

人家都线性代数学得风声水起了,我还在写傻逼题

全机房就我不会线性代数了

包括高一在内就我不知道FFT原理

啥子特征多项式,啥子特征值,

啥子啦普拉斯展开,啥子多项式求逆,啥子多项式取模,啥子多项式exp,啥子多点插值快速求值,别人信手拈来

就我一个傻逼连线性代数的门都没摸到

我tm连求导都求不陈展,微积分根本不知道是什么东西

数学烂得一塌糊涂

垃圾的一比

全机房最垃圾

心情不好,就想骂自己

我就tmd是一个世界无敌大傻逼

 //Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int n,s[N],bl[N],r[N],lcp[N],len;
char ss[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int sa[N],rak[N],h[N],st[N][];
void make_hight(int n) {
For(i,,n-) rak[sa[i]]=i;
for(int i=,k=;i<n;i++) {
if(!rak[i]) continue;
if(rak[i]==) {
int debug=;
}
if(k) k--;
int j=sa[rak[i]-];
while(s[i+k]==s[j+k]) k++;
h[rak[i]]=k;
st[rak[i]-][]=k;
}
For(j,,) For(i,,n-) if(i+(<<j)<n)
st[i][j]=min(st[i][j-],st[i+(<<j-)][j-]);
} int cmp(int a,int b,int y[],int k) {
int o1=a+k>=len?-:y[a+k];
int o2=b+k>=len?-:y[b+k];
return o1==o2&&y[a]==y[b];
} void make_sa(int n) {
static int c[N],t1[N],t2[N];
int m=,*x=t1,*y=t2,p;
For(i,,m-) c[i]=;
For(i,,n-) c[x[i]=s[i]]++;
For(i,,m-) c[i]+=c[i-];
Rep(i,n-,) sa[--c[x[i]]]=i;
for(int k=;k<=n;k<<=) {
p=;
For(i,n-k,n-) y[p++]=i;
For(i,,n-) if(sa[i]>=k) y[p++]=sa[i]-k;
For(i,,m-) c[i]=;
For(i,,n-) c[x[y[i]]]++;
For(i,,m-) c[i]+=c[i-];
Rep(i,n-,) sa[--c[x[y[i]]]]=y[i];
swap(x,y); x[sa[]]=; p=;
For(i,,n-)
x[sa[i]]=cmp(sa[i],sa[i-],y,k)?p-:p++;
m=p;
if(p>=n) break;
}
make_hight(n);
} int get_lcp(int i,int j) {
int k=;
for(k;i+(<<k)<=j;k++); if(k) k--;
return min(st[i][k],st[j-(<<k)][k]);
} int cnt[N],no[N],tot;
void solve() {
int ans=,pos=-; tot=;
while(pos+<len&&tot*<=n) {
pos++;
cnt[bl[sa[pos]]]++;
if(cnt[bl[sa[pos]]]==) tot++;
}
if(tot*<n) { puts("?"); return; }
lcp[]=get_lcp(,pos);
ans=lcp[];
For(i,,len-) {
no[i]=;
cnt[bl[sa[i-]]]--;
if(!cnt[bl[sa[i-]]]) tot--;
while(pos+<len&&tot*<=n) {
pos++;
cnt[bl[sa[pos]]]++;
if(cnt[bl[sa[pos]]]==) tot++;
}
if(tot*>=n) lcp[i]=get_lcp(i,pos);
else lcp[i]=;
ans=max(ans,lcp[i]);
if(lcp[i]==lcp[i-]&&h[i]>=lcp[i]) no[i]=;
}
if(!ans) { puts("?"); return; }
For(i,,len-) if(!no[i]&&lcp[i]==ans) {
For(j,sa[i],sa[i]+lcp[i]-)
printf("%c",'a'+s[j]);
puts("");
}
//puts("");
} //#define DEBUG
int main() {
#ifdef DEBUG
freopen("std.in","r",stdin);
//freopen(".out","w",stdout);
#endif
int id=,flag=;
for(;;) {
read(n);
if(!n) break;
len=; id=;
For(i,,n) {
scanf("%s",ss);
int tp=strlen(ss);
For(j,,tp-) { s[len++]=ss[j]-'a'; bl[len-]=i; }
s[len++]=++id;
}
For(i,,) cnt[i]=;
make_sa(len);
if(flag++) puts("");
solve();
}
return ;
}

poj3294Life Forms的更多相关文章

  1. POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串

                                                                              Life Forms Time Limit: 500 ...

  2. POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)

    You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial ...

  3. POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)

    题意: 给定 n 个字符串,求出现在不小于 k 个字符串中的最长子串. 分析: 将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组. 然后二分答案,将后缀分成若干组,判断 ...

  4. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  5. xamarin.forms新建项目android编译错误

    vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...

  6. ASP.NET Forms 身份验证

    ASP.NET Forms 身份验证 在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数.2. 创建登录页. 登录页中的操作包括: 1. 验证用 ...

  7. Xamarin.Forms 简介

    An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...

  8. C# 定时器 Timers.Timer Forms.Timer

    1.定义在System.Windows.Forms里 Windows.Forms里面的定时器比较简单,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了 //启动定时器 ...

  9. Xamarin.Forms 免费电子书

    Xamarin Evolve 正在举行,现在已经放出2本免费的Xamarin.Forms 免费电子书,据现场的同学说这两天还有Xamarin.Forms 重磅消息发布: Creating Mobile ...

随机推荐

  1. 采用多个数据源是Spring的配置

    XML配置多多源文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  2. <mysql>mysql基础学习

    1.Join语法 JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录 ...

  3. 最短路(模板Dtra

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; const i ...

  4. Neo4j和Elasticsearch

    Neo4j和Elasticsearch Neo4j和Elasticsearch是一种让人眼前一亮的组合,为什么需要把搜索和图表结合起来呢?它们是如何使用的呢? 在无处不在的互联网搜索引擎的推动下,全文 ...

  5. CSS 命名规范将省下调试时间

    我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...

  6. scrapy 多个爬虫运行

    from scrapy import cmdline import datetime import time import os import scrapy from scrapy.crawler i ...

  7. 利用msbuild白名单执行shellcode

    x64:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe x32:C:\Windows\Microsoft.NET\Framewo ...

  8. iOS_iPhone App自动化测试

    无线客户端的发展很快,特别针对是android和ios两款无线操作系统的客户端应用,相应的测试工具也应运而生,这里主要给大家介绍一些针对 iPhone App的自动化测试工具.          首先 ...

  9. [java]反转单项链表,用O(n)时间和O(1)空间

    链表数据结构 public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = ...

  10. centos 下载并安装nodejs

    安装方法1——直接部署 1.首先安装wget ,这个一般都有自带有的,可能已经在系统里安装好了的. yum install -y wget 如果已经安装了可以跳过该步 2.下载nodejs最新的tar ...