肉丝哥哥钦定好题 话说我的blog现在为什么到处都是肉丝哥哥

先来想一个弱化版,假如能够n整除K怎么做?

把每个数字看成一个字符串,按字典序排名,这个可以后缀数组解决,然后暴力枚举每种情况,O(1)判两个长度为n/K的数字大小即可

然后不能整除一定是有n-n/K*K个长度为n/K+1的数字

先二分答案排名,枚举起始位置,考虑一个贪心的做法,假如当前能够放一个长度为n/K+1的就立刻放,这样能够保证最优

why?放n/K+1和n/K的区别相当于多往前走了1步,但是多用了一组n/K+1,假如走n/K在未来某一决策能够走n/K+1,那么当前走n/K+1只需付出少用一组就可以拉回同一起跑线。其实也就是具有决策包容性

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const int _=1e2;
const int maxn=*2e5+_;
int n,K,U;char ss[maxn]; int sa[maxn],Rank[maxn];
namespace SA
{
int Rsort[maxn],tt[maxn];
void getsa(int n,int m)
{
for(int i=;i<=n;i++)Rank[i]=ss[i]-''; memset(Rsort,,sizeof(Rsort));
for(int i=;i<=n;i++)Rsort[Rank[i]]++;
for(int i=;i<=m;i++)Rsort[i]+=Rsort[i-];
for(int i=n;i>=;i--)sa[Rsort[Rank[i]]--]=i; int ln=,p=;
while(p<n)
{
int k=;for(int i=n-ln+;i<=n;i++)tt[++k]=i;
for(int i=;i<=n;i++)
if(sa[i]-ln>)tt[++k]=sa[i]-ln; memset(Rsort,,sizeof(Rsort));
for(int i=;i<=n;i++)Rsort[Rank[tt[i]]]++;
for(int i=;i<=m;i++)Rsort[i]+=Rsort[i-];
for(int i=n;i>=;i--)sa[Rsort[Rank[tt[i]]]--]=tt[i]; for(int i=;i<=n;i++)tt[i]=Rank[i]; p=;Rank[sa[]]=;
for(int i=;i<=n;i++)
{
if(tt[sa[i]]!=tt[sa[i-]]||tt[sa[i]+ln]!=tt[sa[i-]+ln])p++;
Rank[sa[i]]=p;
} m=p;ln*=;
}
}
void GetTrueRank(int n)
{
int p=;
for(int i=;i<=*n-;i++)
if(sa[i]<=n)Rank[sa[i]]=Rank[sa[i]+n]=++p; for(int i=;i<=n;i++)sa[Rank[i]]=i;
}
void main(int n){getsa(*n-,);GetTrueRank(n);}
} namespace PRINT
{
void main(int ans,int len)
{
int st=sa[ans];
for(int i=;i<=len;i++)putchar(ss[i+st-]);
puts("");
}
}
namespace SOL1
{
void main()
{
int ans=(<<);
for(int i=;i<=U;i++)
{
int num=,tt=;
for(int j=;j<=K;j++)
num=max(num,Rank[i+tt]),tt+=U;
ans=min(ans,num);
}
PRINT::main(ans,U);
}
}
namespace SOL2
{
int calc(int em)
{
int mmax=;
for(int i=;i<=U+;i++)
{
int p=i,num=;
for(int j=;j<=K;j++)
{
if(Rank[p]<=em)p+=U+,num++;
else p+=U;
if(p>=i+n-)break;
}
mmax=max(mmax,num);
}
return mmax;
}
void main()
{
int res=n-U*K;
int el=,er=n,em,ans;
while(el<=er)
{
em=(el+er)/;
if(calc(em)>=res)
{
er=em-;
ans=em;
}
else el=em+;
}
PRINT::main(ans,U+);
}
} int main()
{
scanf("%d%d%s",&n,&K,ss+); U=n/K;
for(int i=;i<n;i++)ss[i+n]=ss[i];
SA::main(n); if(n%K==)SOL1::main();
else SOL2::main(); return ;
}

bzoj4486: [Jsoi2015]串分割的更多相关文章

  1. 「JSOI2015」串分割

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

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

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

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

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

  4. 【bzoj4486】【JSOI2015】串分割

    老省选题了. 首先考虑怎么比较超长数字的大小? 参见UTR1的那道题 先比size,然后比较字典序即可. 接下来考虑下切割的问题. 因为要将字符串切割成k份,所以这个字符串只会存在n/k个本质不同的起 ...

  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. [Bzoj4943][Noi2017]蚯蚓(hash)

    4943: [Noi2017]蚯蚓 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 237  Solved: 110[Submit][Status][D ...

  2. 【UTR #2】题目排列顺序

    题目描述 "又要出题了." 宇宙出题中心主任 -- 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 $n$ 道题,吉米多出题斯基需要决定这些题目的难度,然后再在汪 ...

  3. mybatis 源码学习(二)sqlsession

    mybatis 中的sqlsession是一个非常重要的类.上篇我们分析了sessionfactory初始化配置文件,我们继续分析sessionfactory拿到会话进行的操作. 看这里.getMap ...

  4. 安装Vmware增强工具

    主机: Win7 虚拟机: VMware8.0+Debian6 目标: 离线安装软件包和VMware Tools 在虚拟机上安装完debian6后 1.在vmware的菜单中选择Vm->inst ...

  5. 手动安装windows的磁盘清理工具

    All you really need to do is copy some files that are already located on your server into specific s ...

  6. elasticsearch 最佳实践

    创建索引 无mapping 创建索引名称为index的索引 curl -XPUT http://localhost:9200/book 有mapping 如果需要定义每个类型的结构映射,创建type名 ...

  7. maven运行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误

           在eclipse中对准项目运行maven->update project命令时报错:org/apache/maven/shared/filtering/MavenFiltering ...

  8. mySql 主从复制linux配置

    总结: 主库(192.168.1.251): /etc/my.cnf.d/server.cnf [mysqld] log-bin=mysql-bin server-id=1 从库(192.168.1. ...

  9. 猫猫学iOS之小知识之_xcode插件的删除方法_自己主动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自己主动提示,

    猫猫分享,必须精品 原创文章.欢迎转载. 转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:解决解决自己主动提示图片插件KSImageNamed有时不 ...

  10. Odoo 养猪

    阶段 仔猪养成为肉猪 乳猪养成为仔猪 母猪繁殖乳猪     每一个饲养阶段,基本上在同一组笼舍,活动场所:进入到下一饲养阶段才会转换笼舍.在每一个饲养阶段,基本上经历以下过程 饲养 注射疫苗 饲养 投 ...