题目描述

儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟。小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼。也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老皮也会尽量满足他的要求,帮他买一些新玩具。

一开始小皮有一个长度为\(N\)的玩具序列 , 小皮的玩具可以用\(a,b,c,...,z26\)个英文字母表示,小皮可能会有\(q\)种需求,每种需求可以用一个二元组\((x,y)\)表示代表在此时最喜欢\(x\)这种玩具,他希望老皮帮他买回\(y\)个玩具\(x\),小皮希望知道假如用这\(y\)个玩具去替换原来的玩具,最多可以产生多长的连续为\(x\) 的这种玩具的序列?

输入格式

第一行一个正整数\(N\),表示小皮有\(N\)个玩具

接来下一行一个由小写字母构成的字符串,表示初始的玩具序列。

接来下一行一个正整数\(q\), 表示小皮的\(q\)种需求

接下来\(q\)行,每行输入二元组\((x,y)\),含义如题目描述所述

输出格式

输出一共\(q\)行,表示每组询问的答案

样例输入

5

aabaa

2

a 1

b 2

样例输出

5

3

样例解释

对于第一组询问,我们可以把\(b\)替换为\(a\),那么连续为\(a\)的最长序列长度为5

对于第二组询问,我们可以把与\(b\)相邻的两个\(a\)替换为\(b\),那么连续为\(b\)的最长序列长度为3

数据范围

对于 10% 的数据:\(N,q<=10\)

对于 30% 的数据:\(N,q<=100\)

对于另外20%的数据:只存在\(a,b\)两种字符

对于100%的数据:\(N<=2000,q<=3*10^5,1<=y<=N\)

保证所有出现的字符都是小写字母.

题解

对于这道题,可以发现N的范围是可以接受\(N^2\)的,而q比较大,如果再套个什么东西很容T掉,所以我们选择在外面预处理,dp求出\(dp[i][j]\)表示把原串\(i\)个字符替换为\(j\)的最大长度

实现:\(N^2\)枚举每个子串,再在外面套一个枚举字母的循环,复杂度\(O(26*N^2)\)

所以总复杂度\(O(26*N^2+q)\)

#include<bits/stdc++.h>
#define Max(a,b) ((a)>(b)?(a):(b))
#define in(i) (i=read())
using namespace std;
inline int read() {
int ans=0,f=1; char i=getchar();
while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
while(i>='0' && i<='9') {ans=(ans<<1)+(ans<<3)+(i^48); i=getchar();}
return ans*f;
}
int n,m;
int dp[2010][30];
char s[2010];
void init() {
for(int i=1;i<=26;i++) {
for(int j=1;j<=n;j++) {
int tq=0;
for(int k=j;k<=n;k++) {
if((s[k]-'a'+1)!=i) tq++;
dp[tq][i]=Max(dp[tq][i],k-j+1);
}
for(int k=1;k<=n;k++) if(dp[k-1][i]>dp[k][i]) dp[k][i]=dp[k-1][i];//这里注意一下,因为题目要求替换的数量可能会大于需要替换的字符数量,比如样例中只有一个b,单若是题目要求替换两个a的没有这个更新就会WA
}
}
}
int main()
{
//freopen("toy.in","r",stdin);
//freopen("toy.out","w",stdout);
in(n);scanf("%s",s+1);
init();in(m);
char t[2];int a;
for(int i=1;i<=m;i++) {
scanf("%s%d",t,&a);
printf("%d\n",dp[a][t[0]-'a'+1]);
}
}

博主蒟蒻,随意转载.但必须附上原文链接

http://www.cnblogs.com/real-l/

[8.16模拟赛] 玩具 (dp/字符串)的更多相关文章

  1. [10.18模拟赛] 序列 (DP)

    [10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...

  2. 9 16 模拟赛&关于线段树上二分总结

    1 考试时又犯了一个致命的错误,没有去思考T2的正解而是去简单的推了一下式子开始了漫漫找规律之路,不应该这样做的 为了得到规律虽然也打了暴力 但是还是打了一些不必要的程序 例如求组合数什么的比较浪费时 ...

  3. 模拟赛20181016 dp

    给出1-n的序列插入一个bst: 给出T组询问,包含n,h分别代表点数为n,高度为h的树,求所有插入顺序的合法方案数,模1e9+7 样例输入 1 2  1 样例输出 2 #include<bit ...

  4. [ZROI 9.16模拟赛] Tutorial

    Link: 传送门 A: 套路题结果想了好久…… 排序二叉树的性质就是中序遍历单调递增 于是只考虑当前树的中序遍历的序列即可,与树的形态无关 将序列改成严格单调增想到最大化不变的数,但直接LIS求的是 ...

  5. 放棋游戏(NOIP模拟赛)(DP)

    没有原题... 囧.. [问题描述] 游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子.要求再 ...

  6. 98: 模拟赛-神光 dp

    $code$ #include <cstdio> #include <cstring> #include <algorithm> using namespace s ...

  7. 2020.12.16 模拟赛x+1

    A. 接力比赛 跑两遍背包,再进行一些玄学的剪枝 代码 #include<cstdio> #include<algorithm> #define rg register inl ...

  8. 繁华模拟赛 vicent的字符串

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  9. NOIp模拟赛 现实(DP 拓扑)

    题目来源:by lzz \(Description\) 给定一张有向图,求对于哪些点,删除它和它的所有连边后,图没有环. \(n\leq 5\times10^5,m\leq 10^6\). \(Sol ...

随机推荐

  1. Java学习笔记十三:Java中的类和对象

    Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...

  2. 开发必备知识点--django项目启动时,url加载之前,执行某个.py文件

    django项目启动时,自定义执行某个py文件 在任意的app下的apps.py中的Config类下自定义ready()方法,并且调用autodiscover_modules. app01/apps. ...

  3. c#根据ip获取城市地址

    用的API是百度.新浪.淘宝: 1.首先是一个检测获取的值是不是中文的方法,因为有的ip只能识别出来某省,而城市名称则为空返回的json里会出现null或undefined. public stati ...

  4. 生成Excel.xlsx文件 iOS

    使用到的三方库 https://github.com/jmcnamara/libxlsxwriter cocoapods导入 pod 'libxlsxwriter', '~> 0.8.3' 1. ...

  5. 【题解搬运】PAT_A1016 Phone Bills

    从我原来的博客上搬运.原先blog作废. 题目 A long-distance telephone company charges its customers by the following rul ...

  6. 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数

    函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...

  7. 剑指offer-跳台阶08

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). class Solution: def jumpFloor(self, ...

  8. 链上链下交互 以太坊Dapp接口开发

    主要是指的是用NodeJs调用 提供接口供前端使用 用户查询和转账 以太坊Dapp项目 众筹项目 功能需求 路人 查看所有众筹项目, 2 @ OK 根据众筹项目的address获取该众筹的详情 (参与 ...

  9. jquery用正则表达式验证密码强度

    /**         * 不加paste鼠标粘贴不起作用         * 不加input第一次粘贴的时候不变         * 加上input和focus可以兼容表情         * ke ...

  10. websocket协议详解;

    websocket是基于http协议,借用http协议来完成连接阶段的握手: 当连接建立后,浏览器和服务器之间的通信就和http协议没有关系了,b.s之间只用websocket协议来完成基本通信. = ...