[CSP-S模拟测试]:字符交换(贪心+模拟)
2024-09-05 13:26:30
题目传送门(内部题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++
最新文章
- SpringRMI解析1-使用示例
- iOS开发工程师面试知识点汇总
- ios 异步处理耗时操作
- poj 3694 pku 3694 Network tarjan求割边 lca
- exit和_exit的区别
- 使用PHP处理POST上传时$_FILES数组为何为空
- php include include_once require require_once 的区别与联系
- JavaScript- The Good Parts function Curry
- PHP中PDO DEMO
- if语句,函数function
- iOS开源库--最全的整理
- 【一天一道LeetCode】#12 Integer to Roman
- 社交CRM SCRM
- 学习笔记: IO操作及序列化
- JS设计模式(4)迭代器模式
- HDU 5754 Life Winner Bo(各类博弈大杂合)
- Firefox What&#39;s New 太难找了
- V-rep中的加速度计与陀螺仪
- QTableview 获取鼠标坐标的item(QModelIndex)
- 什么是事件代理?DOM2.0标准事件模型的三个阶段
热门文章
- Python模拟进度条
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
- L2-013. 红色警报(并查集+无向图联通分量)
- 如何利用 CSS 的动画原理,创作一个乒乓球对打动画
- PermissionError: [Errno 13] Permission denied: &#39;/run/user/0/jupyter&#39;
- 搞懂Redis复制原理
- Codeforces 1190A. Tokitsukaze and Discard Items
- IDEA导入外部code style
- python进阶资源
- hdfs 配置文件详解