Display Substring

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
// sa[i]: 排名是i位的是第几个后缀
// rk[i]: 第i个后缀的排名是多少
// height[i]: sa[i]与sa[i-1]
const int N=100010;
char s[N];
int rk[N],sa[N],cnt[N],height[N];
int x[N],y[N];
int n,m;
void rsort()// x[i] 第一关键字 y[i] 第二关键字 基数排序
{for(int i=1;i<=m;i++) cnt[i]=0;for(int i=1;i<=n;i++) cnt[x[i]]++;for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];for(int i=n;i;i--) sa[cnt[x[y[i]]]--]=y[i];
}
void SA()
{n=strlen(s+1);m=300;for(int i=1;i<=n;i++) x[i]=s[i],y[i]=i;rsort();for(int k=1;k<=n;k<<=1){int p=0;for(int i=n-k+1;i<=n;i++) y[++p]=i;// 第二关键字为空字符排在最前面for(int i=1;i<=n;i++) if(sa[i]>k) y[++p]=sa[i]-k;rsort();swap(x,y);x[sa[1]]=1,p=1;for(int i=2;i<=n;i++)x[sa[i]]=(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k]?p:++p);if(p==n) break;m=p;}for(int i=1;i<=n;i++) rk[sa[i]]=i;// 求heightfor(int i=1,j=0;i<=n;i++){if(j) --j;while(s[i+j]==s[sa[rk[i]-1]+j]) j++;height[rk[i]]=j;}
}
int v[200];ll K;
int sum[N];
bool check(int x)
{ll cnt=0;for(int i=1;i<=n;i++){// [sa[i],r)的权值小于x// sa[i]~n  sum[sa[i]-1]+xint r=upper_bound(sum+sa[i],sum+n+1,sum[sa[i]-1]+x)-sum;cnt+=max(0,r-sa[i]-height[i]);}return (cnt>=K);
}
int main()
{int Tc;scanf("%d",&Tc);while(Tc--){scanf("%d%lld%s",&n,&K,s+1);for(int i=0;i<26;i++) scanf("%d",&v[i+'a']);SA();ll tot=0;for(int i=1;i<=n;i++) tot+=n-sa[i]+1-height[i];if(tot<K) {puts("-1");continue;}int l=100;for(int i=1;i<=n;i++) {l=min(l,v[s[i]]);sum[i]=sum[i-1]+v[s[i]];}int r=sum[n];while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}printf("%d\n",l);}return 0;
}

2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)相关推荐

  1. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(3)签到题3题

    2021"MINIEYE杯"中国大学生算法设计超级联赛(3) Start Time : 2021-07-27 12:00:00 End Time : 2021-07-27 17:0 ...

  2. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(1)签到题15869

    2021"MINIEYE杯"中国大学生算法设计超级联赛(1) Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:1 ...

  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛

    2021"MINIEYE杯"中国大学生算法设计超级联赛 1006 Given a sequence of integers of length n, find the shorte ...

  4. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)

    2021"MINIEYE杯"中国大学生算法设计超级联赛(2) 1008 I love exam (类背包DP) 1010 I love permutation (数学构造,剩余系) ...

  5. 7068 Dota2 Pro Circuit 杭电多校(2021“MINIEYE杯”中国大学生算法设计超级联赛9) [贪心+双指针]

    题目 Dota2 Pro Circuit *Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...

  6. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(5)签到题4题

    Solved Pro.ID Title Ratio(Accepted / Submitted) 1001 Miserable Faith 33.33%(19/57) 1002 String Mod 2 ...

  7. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(8)

    1006 GCD Game (博弈论,nim游戏,质因子个数) 题意:有n个数a1,a2....an两个人玩游戏,Alice先动,Bob后动每次可以将一个数变为他的因子,直到不能动就输了. 题解:将问 ...

  8. 2021“MINIEYE杯”中国大学生算法设计超级联赛(1)个人解题报告

    文章目录 HDU6950 Mod, Or and Everything HDU6954 Minimum spanning tree HDU6958 KD-Graph HDU6957 Maximal s ...

  9. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

    前言 依旧是白嫖账号,只打了一些题/kk 正题 1002 Buying Snacks 题目大意 nnn个物品,每个可以买一次也可以不买,如果买需要选择1/21/21/2块钱的,然后也可以相邻两个一起买 ...

  10. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

最新文章

  1. php集成paypal付款流程,在PHP中集成PayPal标准支付
  2. python能和c语音交互吗_Python与C交互概述
  3. DevOps笔记-08:DevOps追求的根本目标:多快好省
  4. vbs复制自己到tmp目录
  5. matlabpython建模_一直在用Matlab建模,现在Python很火,用学么?
  6. linux中的文件,文件夹,链接的权限划分
  7. Java和.NET互操作:应该放弃Web Service吗
  8. 企业电力征信大数据价值挖掘与应用
  9. matlab小区制移动通信网,LTE习题 - 无线移动 - 通信人家园 - Powered by C114
  10. 晨哥真有料丨这样的你很掉价!
  11. dede文章采集管理php,织梦采集规则如何写(织梦自带采集器写规则技巧)
  12. 免费下载IEEE、SCI论文的网站
  13. java 前后端分离_Java项目如何实现前后端分离
  14. 计算机桌面不显示时间,win7电脑不显示时间怎么办|win7电脑不显示时间的恢复方法...
  15. 如何恢复、打开、开启默认共享ipc$ c$ Dameware安装出错
  16. Flex 绘制圆形或椭圆并填充图片
  17. 电子不停车收费系统(ETC)专题(2)——国内现状
  18. Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)
  19. MySQL数据库教程天花板,mysql安装到mysql高级,强|硬
  20. 软件开发项目风险管理的几点体会

热门文章

  1. 查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法
  2. 模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!
  3. java在文件的后面添加_java 在file的尾部添加数据的两种方法总结
  4. 三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程
  5. oracle symonym_Oracle的同义词(synonyms)
  6. 剑指offer-数组中的重复的数字-p39
  7. [C++11]返回值类型后置
  8. [C++STL]C++实现priority_queue容器适配器
  9. LeetCode 138 复制带随机指针的链表-中等
  10. [蓝桥杯2018初赛]第几天-日期计算(水题)