队内赛T1贪心日常
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了队内赛T1贪心日常相关的知识,希望对你有一定的参考价值。
队内赛T1 日常
题目
输入输出样例
输入 #1
10
aabdbaddca
输出 #1
3
大样例
example2.zip
解题思路
关于,第三个子任务的意义是什么??
贪心
奇迹以第 i 个点为结尾, 奇迹最大长度
l 为以 i 为结尾,奇迹的最左端
比如 abadb 的最左端为 1,1,2,2,3;奇迹长度为1,2,2,3,3
奇迹的长度为 i - l + 1
用一个桶记录字母上次出现的位置
每次加入 i 时,看一下当前的奇迹有没有包含位置 i 的字母,如果有就更新最左端
Code
#include<bits/stdc++.h>
using namespace std;
char s[300100]; //反正任务3没分,就不想搞字母输入了
int n, ans, l, now, a[30];
int main() {
scanf("%d", &n);
scanf("%s", s + 1);
l = 1;
for(int i = 1; i <= n; i ++) {
int now = s[i] - 'a' + 1;
if(l <= a[now]) l = a[now] + 1; //更新最左端
a[now] = i; //更新字母的位置
ans = max(ans, i - l + 1);
}
printf("%d", ans);
}
以上是关于队内赛T1贪心日常的主要内容,如果未能解决你的问题,请参考以下文章