枚举颜色, 枚举第几个该颜色,l、r,计算l-r的最小交换次数,每两个的交换次数是:p[i][ra] - p[i][la] - 1 - (ra-la-1);
wrong:
#include <bits/stdc++.h>
using namespace std;
int n, m, num[30], p[30][55], ans;
char s[55];
int main() {
scanf("%d%s%d", &n, s, &m);
int len = strlen(s);
for (int i = 0; i < len; i++) {
p[s[i] - 64][++num[s[i] - 64]] = i;
}
for (int i = 1; i <= 26; i++) {
for (int l = 1; l <= num[i]; l++) {
for (int r = l; r <= num[i]; r++) {
int sum = 0;
sum = p[i][r] - p[i][l] - 1 - (r - l - 1);//只算了边上的两个
if (sum > m)
continue;
else
ans = max(ans, r - l + 1);
}
}
}
cout << ans << endl;
return 0;
}
/*
11
ABCADABEDDA
8
*/
#include<bits/stdc++.h>
using namespace std;
int n,m, num[30], p[30][55], ans;
char s[55];
int main(){
scanf("%d%s%d",&n,s,&m);
int len = strlen(s);
for(int i = 0; i < len; i++){
p[s[i]- 64][++num[s[i] - 64]] = i;
}
for(int i = 1; i <= 26; i++){//
for(int l = 1; l <= num[i]; l++){
for(int r = 1; r <= num[i]; r++){//
int ra = r, la = l, sum = 0, fl = 0;
while(la < ra){
sum += p[i][ra] - p[i][la] - 1 - (ra-la-1);
if(sum > m) {
fl = 1;break;
}
la++, ra--;
}
if(!fl) ans = max(ans, r-l+1);
}
}
}
cout<<ans<<endl;
return 0;
}
/*
11
ABCADABEDDA
8
9
ABBABABBA
3
4
7
BBABABB
3
4
4
ZWYZ
2
*/
优化:尺取法
#include <bits/stdc++.h>
using namespace std;
int n, m, num[30], p[30][55], ans;
char s[55];
int main() {
scanf("%d%s%d", &n, s, &m);
int len = strlen(s);
for (int i = 0; i < len; i++) {
p[s[i] - 64][++num[s[i] - 64]] = i;
}
for (int i = 1; i <= 26; i++) { //
for (int l = 1, r = 1; r <= num[i];) {
int ra = r, la = l, sum = 0;
while (la < ra) {
sum += p[i][ra] - p[i][la] - 1 - (ra - la - 1);
la++, ra--;
}
if (sum > m)
l++;
else {
ans = max(ans, r - l + 1);
r++;
}
}
}
cout << ans << endl;
return 0;
}
标签:
枚举
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)