老省选题了。

首先考虑怎么比较超长数字的大小?

参见UTR1的那道题

先比size,然后比较字典序即可。

接下来考虑下切割的问题。

因为要将字符串切割成k份,所以这个字符串只会存在n/k个本质不同的起始位置。

然后可能会发现,如果能够整除的话,将这些起始位置直接后缀排序就可以了。

那么如果不能整除怎么办?

我们可以发现,如果有多余的,那么最长的字符串一定最多比别人多1

这个贪心的正确性比较的显然。

那么我们怎么处理长度不同的呢?

将之前的比较二分即可。

#include<bits/stdc++.h>
#define N 400010
using namespace std;
int t1[N],t2[N],a[N],sa[N],rk[N],c[],h[N];
int n,m,k,cnt;
char s[N];
void calcsa(int n,int m){
int *x=t1,*y=t2,f=,p=;
for(int i=;i<=m;i++)c[i]=;
for(int i=;i<=n;i++)c[x[i]=a[i]]++;
for(int i=;i<=m;i++)c[i]+=c[i-];
for(int i=n;i;i--)sa[c[x[i]]--]=i;
for(int i=;i<=n&&p<=n;i<<=){p=;
for(int j=n-i+;j<=n;j++)y[++p]=j;
for(int j=;j<=n;j++)if(sa[j]>i)y[++p]=sa[j]-i;
for(int j=;j<=m;j++)c[j]=;
for(int j=;j<=n;j++)c[x[y[j]]]++;
for(int j=;j<=m;j++)c[j]+=c[j-];
for(int j=n;j>=;j--)sa[c[x[y[j]]]--]=y[j];
swap(x,y);x[sa[]]=;p=;
for(int j=;j<=n;j++)
x[sa[j]]=y[sa[j]]==y[sa[j-]]&&y[sa[j]+i]==y[sa[j-]+i]?p-:p++;
m=p;
}
for(int i=;i<=n;i++)rk[sa[i]]=i;
for(int i=;i<=n;i++){
int j=sa[rk[i]-];
if(f)f--;while(a[i+f]==a[j+f])f++;
h[rk[i]]=f;
}
}
inline bool check(int x){
int p;
for(int i=;i<=m;i++){
int t=i;p=k;
while(p--){
if(rk[t]<=x)t+=m;else t+=m-;
if(t>=n+i)return ;
}
}
return ;
}
inline void work(){
int l=,r=cnt;
while(l<r){
int mid=(l+r)>>;
if(check(mid))r=mid;else l=mid+;
}
for(int i=;i<=n;i++)if(rk[i]==l)
for(int j=i;j<=i+m-;j++)printf("%c",a[j]+'');
puts("");
}
int main(){
scanf("%d%d",&n,&k);scanf("%s",s+);
for(int i=;i<=n;i++)a[++cnt]=s[i]-'';
for(int i=;i<n;i++)a[++cnt]=s[i]-'';
calcsa(cnt,);
//for(int i=1;i<=cnt;i++)printf("%d ",sa[i]);puts("");
m=n/k+(n%k!=);
work();
}

【bzoj4486】【JSOI2015】串分割的更多相关文章

  1. bzoj4486: [Jsoi2015]串分割

    肉丝哥哥钦定好题 话说我的blog现在为什么到处都是肉丝哥哥 先来想一个弱化版,假如能够n整除K怎么做? 把每个数字看成一个字符串,按字典序排名,这个可以后缀数组解决,然后暴力枚举每种情况,O(1)判 ...

  2. 「JSOI2015」串分割

    「JSOI2015」串分割 传送门 首先我们会有一个贪心的想法:分得越均匀越好,因为长的绝对比短的大. 那么对于最均匀的情况,也就是 \(k | n\) 的情况,我们肯定是通过枚举第一次分割的位置,然 ...

  3. C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出

    C 语言 字符串命令 strstr()的用法 实现将原字符串以分割串分割输出 strstr() 命令是在原字符串中查找指定的字符串第一次出现的地址,用这个特性可以实现字符的分割,判断是否包涵等功能: ...

  4. Minimum Palindromic Factorization(最少回文串分割)

    Minimum Palindromic Factorization(最少回文串分割) 以下内容大部分(可以说除了关于回文树的部分)来自论文A Subquadratic Algorithm for Mi ...

  5. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  6. Codeforces 898 贪心关闭最少闹钟 优先队列最少操作构造N/2squares 讨论情况哈希数字串分割a+b=c

    A /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a,b) ...

  7. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

随机推荐

  1. 【bzoj5107】[CodePlus2017]找爸爸 dp

    题目描述 给出两个基因串,你需要在其中插入任意个空格,使得两个串长度相同.如果两个串的某同一位置都是字母则获得某给定收益,对于每个串的每个长度为k的连续空格段要付出a(k-1)+b的损失.求最大净收益 ...

  2. Go语言【第一篇】:Go初识

    Go语言特色 简洁.快速.安全 并行.有趣.开源 内存管理.数据安全.编译迅速 Go语言用途 Go语言被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言.对于高性能分 ...

  3. Python爬取B站视频信息

    该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种 ...

  4. BZOJ3894:文理分科——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3894 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理 ...

  5. BZOJ1068:[SCOI2007]压缩——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1068 Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复 ...

  6. 【树形DP】【P1351】 【NOIP2014D1T2】联合权值

    传送门 Description 无向连通图 \(G\) 有 \(n\) 个点, \(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\) ,每 ...

  7. JS实现的随机乱撞的彩色圆球特效代码

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. c++11新特性之nullptr

    在c++11中,nullptr可完全代替NULL.  然而NULL和nullptr还是稍有不同,NULL可被转化为int类型,而nullptr不能.因此nullptr对NULL在进行模板推导或者函数重 ...

  9. lightoj 1282 && uva 11029

    Leading and Trailing lightoj 链接:http://lightoj.com/volume_showproblem.php?problem=1282 uva 链接:http:/ ...

  10. Kafka消息delivery可靠性保证(Message Delivery Semantics)

    原文见:http://kafka.apache.org/documentation.html#semantics kafka在生产者和消费者之间的传输是如何保证的,我们可以知道有这么几种可能提供的de ...