poj3294Life Forms
我真是一个垃圾
模板题都不会做
模板题还要别人教
细节写法还要别人教
别人一分钟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的更多相关文章
- POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串
Life Forms Time Limit: 500 ...
- POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)
You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial ...
- POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)
题意: 给定 n 个字符串,求出现在不小于 k 个字符串中的最长子串. 分析: 将 n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组. 然后二分答案,将后缀分成若干组,判断 ...
- Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架
最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...
- xamarin.forms新建项目android编译错误
vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...
- ASP.NET Forms 身份验证
ASP.NET Forms 身份验证 在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数.2. 创建登录页. 登录页中的操作包括: 1. 验证用 ...
- Xamarin.Forms 简介
An Introduction to Xamarin.Forms 来源:http://developer.xamarin.com/guides/cross-platform/xamarin-forms ...
- C# 定时器 Timers.Timer Forms.Timer
1.定义在System.Windows.Forms里 Windows.Forms里面的定时器比较简单,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了 //启动定时器 ...
- Xamarin.Forms 免费电子书
Xamarin Evolve 正在举行,现在已经放出2本免费的Xamarin.Forms 免费电子书,据现场的同学说这两天还有Xamarin.Forms 重磅消息发布: Creating Mobile ...
随机推荐
- 洛谷P1860——新魔法药水
传送门:QAQQAQ 题意:商店里有N种药水,每种药水都有一个售价和回收价.小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水.他一天可以使用K次魔法,问他一天最多赚多少钱? N<=60 ...
- 2019 牛客多校第六场 J Upgrading Technology
题目链接:https://ac.nowcoder.com/acm/contest/886/J 题目大意 略. 分析 见代码. 代码如下 #include <bits/stdc++.h> u ...
- USACO 2007 “March Gold” Ranking the Cows
题目链接:https://www.luogu.org/problemnew/show/P2881 题目链接:https://vjudge.net/problem/POJ-3275 题目大意 给定标号为 ...
- ActiveMQ任意文件写入漏洞(CVE-2016-3088)
上传webshell 容器用vulhub的 PUT一个jsp文件 MOVE到api目录 默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/tes ...
- cv2.imwrite()指定图片存储路径
cv2.imwrite("./data/photo_{}.jpg".format(i), photo)
- Hadoop安装成功之后,访问不了web界面的50070端口怎么解决?
Hadoop安装成功之后,访问不了web界面的50070端口 先查看端口是否启用 [hadoop@s128 sbin]$ netstat -ano |grep 50070 然后查看防火墙的状态,是否关 ...
- 6-MySQL高级-索引
索引 1. 思考 在图书馆中是如何找到一本书的? 一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询操作时有1次写的操作), 而且插入操作和更新操作很少出现性能问题, 遇到最多.最容易出 ...
- c++ socket 出现绑定失败的一个特殊原因。Bind failed Error:10049
这个问题,客户那边出现这种情况已经将近一年时间, 一直都得不到很好的解决,我提供出去的动态库可以确保没有问题,因为除了这家公司,其他有好几家公司都在用的,都是很正常的,但是这家公司很奇怪,不,应该说这 ...
- x25, PF_X25 - ITU-T X.25 / ISO-8208 协议接口。
总览 #include <sys/socket.h> #include <linux/x25.h> x25_socket = socket(PF_X25, SOCK_SEQPA ...
- C++之控制内存分配
一.内存分配方式 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释 ...