首页 > 编程语言 >Problem P06. [算法课分治] 找到 k 个最长重复字符串

Problem P06. [算法课分治] 找到 k 个最长重复字符串

时间:2024-02-04 09:34:21浏览次数:30  
标签:right int 分治 P06 letter 字符串 Problem include left

image

注意是在该子字符串内每个字符的出现次数都不少于k。可以采用分治的方法,函数找一个不符合条件的字符,然后将字符串分成两个子字符串,就这样进行递归运算,每次找到符合条件的子字符串就判断一波长度,然后将最长的长度值存下来。

#include<iostream>
#include<bits/stdc++.h>
#include<cstdio>

using namespace std;

int k;
char s[10005];
int valmax = 0;

void longestSubstring(int left, int right)
{
    if (left >= right)
    {
        return;
    }
    int letter[30]={0};
    for (int i = left; i < right; i++)
    {
        letter[s[i]-'a']++;
    }
    for (int i = left; i < right; i++)
    {
        if (letter[s[i]-'a']<k)
        {
            longestSubstring(left, i);
            longestSubstring(i+1, right);
            return;
        }
    }
    valmax = max(valmax, right-left);
}

int main()
{
    scanf("%s %d", s, &k);
    longestSubstring(0, strlen(s));
    printf("%d", valmax);
    return 0;
}

标签:right,int,分治,P06,letter,字符串,Problem,include,left
From: https://www.cnblogs.com/understanding-friends/p/16654155.html

相关文章

  • $CDQ$ 分治总结
    \(CDQ\)分治是一种特殊的分治方法,基本思想就是前一半的结果辅助后一半答案解答。一、归并排序提到\(CDQ\)分治,就不得不提到归并排序。作为一种似乎只有在瑞士轮里才有用的算法,归并排序有着优秀的时间复杂度,短小精悍的代码,十分的可爱。首先,我们将问题转换成这样(\(l,r\)代......
  • A+B problem 题解
    先把一个单项式理解为:符号,系数的绝对值,字母,指数。为了方便操作,一口气读完整个字符串(数组),然后去扫描。因为如果第一项为整数的话没有符号,判一判。读入系数的绝对值像快读。如果有\(\texttt{^}\)这个符号,读一下之后的指数。由于只有三个字母,所以可以复制粘贴,不用写冗余的......
  • 树分治
    点分治适合处理大规模的树上路径信息。实现取一个中心点计算跨过中心点的贡献。(lsy说得精辟但抽象)先随便指定一个根\(rt\),我们能将树上的路径分为经过\(rt\)的路径和包含于\(rt\)的某棵子树内的路径(不经过\(rt\))。对于经过当前根节点的路径,又可以分为两种,一种是以根节......
  • OGG-00303 Problem at line 37. Expecting file, table, or record definition: TimeZ
    由于源端和目标端表结构不一致(列顺序有差异),因此使用def文件来同步。在源端配置好def文件后,启动复制进程报错,具体信息如下:2024-01-3111:24:16ERROROGG-00303OracleGoldenGateDeliveryforOracle,r_bszj.rp:Problematline37.Expectingfile,table,orrecorddefin......
  • 树分治相关
    树分治相关一种特别的分治思想,但难点不在于点分治思想本身。有板子,但是板子跟题目重点几乎无关。点分治淀粉质用途:用于处理树上多对点询问或寻找有条件最远(最近)点对。主要是处理多对点对。做法:我们先选择一个节点作为根节点\(rt\),所有完全位于其子树中的路径可以分为两......
  • A Balanced Problemset?
    引言题目链接:https://codeforces.com/contest/1925/problem/B思路由于最后的答案是x分解的全部数的gcd,所以该答案一定是x的因数,只要遍历x的因数k,那么该因数能将x分解成\(\frac{x}{k}\)份。若\(\frac{x}{k}\geqn\),则可将其构造成n组,gcd为k的答案,只需要找到......
  • 【容斥反演】Nanami and Trip Schemes Count Problem
    链接给定\(k\)个特殊格子,求从(1,1)往右或往上走到(n,m),在经过不超过\(p\)个特殊格的情况下的方案数设\(f(S)\)表示钦定走S集合中格子的方案,\(g(S)\)为恰好走S集合的方案,那么\(f\)与\(g\)的关系就是一个\(\subseteq\)意义下的前缀和。即\[f(S)=\sum_{S\subs......
  • CF1925B A Balanced Problemset? 题解
    CF1925B题解题目链接CodeforcesLuogu题目大意有一个长度为\(n\)且和为\(x\)的正整数序列,询问该序列可能的最大公因数。多测。简要思路首先先给出结论:最终的答案一定是\(x\)的因数。接下来我通过两种方法证明:一、类似于“更相减损法”一个序列的\(\gcd\)等于......
  • 上辈子推的"分治 NTT"复杂度分析
    hdu7381Cargo式子部分由liuhangxin想出。\[\sum\limits_{i=0}^{n}\binom{k}{i}(n-i)^{k-i}[x^i]\prod\limits_{id=1}^{m}(1-x^{c_{id}})\]实现部分当时胡了一个分治NTT,也不知道时间复杂度为什么是对的,但是过了。AC后十多分钟分析出来这个做法的时间复杂度为\(......
  • B. A Balanced Problemset
    原题链接忠告1:要学会计算时间复杂度!!忠告2:要学会抓事实,不要掉进题目直观模拟的陷阱里事实1.任意k个数的\(gcd\)一定可以是这k个数的最小值,这里以\(k=3\)举例假设\(gcd(a_1,a_2,a_3)=m\),则\(a_1=k_1m,a_2=k_2m,a_3=k_3m\),其中\(k_1,k_2,k_3\)都是整数那么可以通过......