题目传送门(内部题136)


输入格式

  输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$。


输出格式

  输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作后,字符串$s$可能达到的最大的$m$指标。


样例

样例输入:

6 3
abacba

样例输出:

3


数据范围与提示

  对于$40\%$的数据,满足$n\leqslant 10$。
  对于$70\%$的数据,满足$n\leqslant 200$。
  对于$100\%$的数据,满足$1\leqslant n\leqslant 4,000,1\leqslant k\leqslant n^2$。


题解

如果最终连续,那么一定有至少一个字符不动。

于是可以枚举字符,然后将同种字符最小的挪向它即可,用小根堆维护就好了。

其实因为答案满足单调性,所以可以用二分优化。

时间复杂度:$\Theta(n^2)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int N,K;
char ch[4001];
int a[4001];
vector<int> pos[30];
int ans;
int main()
{
scanf("%d%d",&N,&K);
scanf("%s",ch+1);
for(int i=1;i<=N;i++)
{
a[i]=ch[i]-'a'+1;
pos[a[i]].push_back(i);
}
for(int i=1;i<=26;i++)
{
for(int j=0;j<pos[i].size();j++)
{
int L=(j==0)?1:pos[i][j-1]+(pos[i][j]-pos[i][j-1]+1)/2;
int R=(j==pos[i].size()-1)?N:pos[i][j+1]-(pos[i][j+1]-pos[i][j]+1)/2;
for(int k=L;k<=R;k++)
{
int cnt=1;
int sum=abs(pos[i][j]-k);
if(sum>K)continue;
priority_queue<int,vector<int>,greater<int> > q;
for(int l=0;l<pos[i].size();l++)
{
if(l<j)q.push(k-pos[i][l]-j+l);
if(l>j)q.push(pos[i][l]-k-l+j);
}
while(q.size()&&sum+q.top()<=K)
{
cnt++;
sum+=q.top();
q.pop();
}
ans=max(ans,cnt);
}
}
}
printf("%d",ans);
return 0;
}

rp++

最新文章

  1. SpringRMI解析1-使用示例
  2. iOS开发工程师面试知识点汇总
  3. ios 异步处理耗时操作
  4. poj 3694 pku 3694 Network tarjan求割边 lca
  5. exit和_exit的区别
  6. 使用PHP处理POST上传时$_FILES数组为何为空
  7. php include include_once require require_once 的区别与联系
  8. JavaScript- The Good Parts function Curry
  9. PHP中PDO DEMO
  10. if语句,函数function
  11. iOS开源库--最全的整理
  12. 【一天一道LeetCode】#12 Integer to Roman
  13. 社交CRM SCRM
  14. 学习笔记: IO操作及序列化
  15. JS设计模式(4)迭代器模式
  16. HDU 5754 Life Winner Bo(各类博弈大杂合)
  17. Firefox What&#39;s New 太难找了
  18. V-rep中的加速度计与陀螺仪
  19. QTableview 获取鼠标坐标的item(QModelIndex)
  20. 什么是事件代理?DOM2.0标准事件模型的三个阶段

热门文章

  1. Python模拟进度条
  2. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
  3. L2-013. 红色警报(并查集+无向图联通分量)
  4. 如何利用 CSS 的动画原理,创作一个乒乓球对打动画
  5. PermissionError: [Errno 13] Permission denied: &#39;/run/user/0/jupyter&#39;
  6. 搞懂Redis复制原理
  7. Codeforces 1190A. Tokitsukaze and Discard Items
  8. IDEA导入外部code style
  9. python进阶资源
  10. hdfs 配置文件详解