zoukankan      html  css  js  c++  java
  • [CSP-S模拟测试]:String Master(暴力)

    题目描述

    所谓最长公共子串,比如串$A:"abcde"$,串$B:"jcdkl"$,则它们的最长公共子串为串$"cd"$,即长度最长的字符串,且在两个串中都作为连续子串出现过。
    给定两个长度都为RnR的字符串,对于字符串大师的你来说,求它们的最长公共子串再简单不过了。
    所以现在你有$k$次修改机会,每次你可以选择其中某个串的某个位置,将其修改成任意字符。
    你需要合理使用这$k$次修改机会,使得修改之后两个串的最长公共子串最长。相信对于字符串大师的你来说,这个问题也难不倒你。


    输入格式

    第一行包含两个整数$n,k$,分别表示字符串的长度和修改次数。
    第二行包含一个长度为$n$的仅由小写字符构成的字符串$S$。
    第三行包含一个长度为$n$的仅由小写字符构成的字符串$T$。


    输出格式

    输出一行一个整数,即修改完毕之后两个串的最长公共子串的长度。


    样例

    样例输入1:

    5 0
    abcde
    jcdkl

    样例输出1:

    2

    样例输入2:

    5 2
    aaaaa
    ababa

    样例输出2:

    5


    数据范围与提示

    对于$100\%$的数据,$0leqslant kleqslant n$。


    题解

    难得的水题,可是我出去玩去了,所以没考……

    疯回来看题,有点难,不会……

    然后我看了数据范围,这不**题嘛……

    于是$5$分钟就切了。

    然后我知道好多人都打的$DP$,其实暴力就可以。

    我们肯定是连着好几个不匹配的时候使用修改机会,所以我们可以枚举两个串的起点,然后逐位比较,不一样就把机会用掉,知道没有修改或者到头了为止。

    讲个故事,$skyh$看到这道题打了个$DP$,然后想打个暴力对拍一下,打完发现时间复杂度是一样的,这很尴尬,故事讲完了……

    所以看到简单题千万不要想复杂。

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

    期望得分:$100$分。

    实际得分:$100$分。


    代码时刻

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    char S[301],T[301];
    int l,r,sum;
    int ans;
    int main()
    {
    	scanf("%d%d%s%s",&n,&k,S+1,T+1);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    		{
    			l=i;
    			r=j;
    			sum=0;
    			while(l&&r&&sum<=k)
    			{
    				if(S[l]!=T[r])sum++;
    				l--;
    				r--;
    			}
    			if(sum>k)ans=max(ans,i-l-1);
    			else ans=max(ans,i-l);
    		}
    	printf("%d",ans);
    	return 0;
    }
    

    rp++

  • 相关阅读:
    Web API框架学习——消息管道(二)
    Web API框架学习——路由(一)
    【转】Lucene.NET详细使用与优化详解
    ASP.NET MVC 创建控制器类过程
    ASP.NET MVC创建视图过程
    ORM映射设计思想
    UWP--集合绑定数据
    UWP--MVVM简单计算器
    UWP--数据绑定的几种方式
    一个自动管理学生信息的控制台应用程序(C语言)Label:Water
  • 原文地址:https://www.cnblogs.com/wzc521/p/11574313.html
Copyright © 2011-2022 走看看