题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数。

字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数。

开始时盲目暴力,直接用桶排序的做法一段一段去求,果然t了(这种就不贴代码了)......

然后想到先扫一遍,求出从字符串首位到第 i 位的最小字符数,再用一个数组存第 0 位到第 i 位的最小字符,比较第 i 位的字符和前 i - 1 位的最小字符,第 i 位更小的话就更新最小字符和最小字符数......这样扫一遍后,问到哪个区间就比较区间左右端点的最小字符。若左侧较大,则直接输出右侧最小字符数;若两侧相等,则输出右侧的最小字符数减去左侧的最小字符数;左侧不可能小于右侧。

但是,这种想法有较大漏洞,不能说漏洞,这就是错误的想法,因为这样所记录的最小的字符未必会出现在所求区间内......

作为对自己的警示,把这种错误的东西挂出来侮辱下自己......

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
using namespace std;
int num[];
char alp[];
int main()
{
std::ios::sync_with_stdio(false);
int t,len,m,l,r;
string s;
cin >> t;
for(int i = ; i <= t; i++)
{
memset(num,,sizeof(num));
cin >> len >> m;
cin >> s;
cout << "Case #"<< i <<":" << endl;
num[] = ;
alp[] = s[];
for(int i = ; i < len; i++)
{
if(s[i]<alp[i-])
{
alp[i] = s[i];
num[i] = ;
}
else if(s[i] == alp[i-])
{
alp[i] = s[i];
num[i] = num[i-]+;
}
else
{
alp[i] = alp[i-];
num[i] = num[i-];
}
}
while(m--)
{
cin >> l >> r;
l--;
r--;
if(l==r)
{
cout << << endl;
continue;
}
if(alp[r] < alp[l])
cout << num[r] << endl;
else if(alp[r] == alp[l])
{
if(alp[l] < s[l] && alp[r] < s[r])
// bug在此: ACBBB...BBCA 查中间,前面白算 if(alp[l]==s[l])
cout << num[r]-num[l]+ << endl;
else
cout << num[r]-num[l] << endl;
}
}
}
return ;
}

接着又想到可否将最小字符出现的位置记录下来,然后发现完全是在自己哄自己开心......

借助wjy的力量,用二维数组记录位置的似桶排序的做法完成了题目,路还很长......

 #include <iostream>
#include <cstring>
using namespace std;
int rc[][];
int main()
{
std::ios::sync_with_stdio(false);
int n,t,q,l,r,j,i;
cin >> t;
string s;
for(int i=;i<;i++)
{
rc[][i]=;
}
for(int c=;c<=t;c++)
{
cout << "Case #" << c << ":" << endl;
cin >> n >> q;
cin >> s;
for(i=;s[i];i++)
{
for(j=;j<=;j++)
{
rc[i+][j]=rc[i][j];
}
rc[i+][s[i]-'A']++;
}
for(i=;i<q;i++)
{
cin >> l >> r;
int ans = ;
for(j = ;ans==;j++)
{
ans = rc[r][j]-rc[l-][j];
}
cout << ans << endl;
}
}
return ;
}

HDU 6345(子串查询 暴力)的更多相关文章

  1. HDU 6345:子串查询(前缀和)

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  2. 子串查询(二维前缀数组) 2018"百度之星"程序设计大赛 - 资格赛

    子串查询 Time Limit: 3500/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  3. 百度之星资格赛2018B题-子串查询

    子串查询 题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯an,接下来他 ...

  4. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  5. hdu 4288 线段树 暴力 **

    题意: 维护一个有序数列{An},有三种操作: 1.添加一个元素. 2.删除一个元素. 3.求数列中下标%5 = 3的值的和. 解题思路: 看的各种题解,今天终于弄懂了. 由于线段树中不支持添加.删除 ...

  6. hdu 5461 Largest Point 暴力

    Largest Point Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  7. HDU 5908 Abelian Period 暴力

    Abelian Period 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5908 Description Let S be a number st ...

  8. hdu 5762 Teacher Bo 暴力

    Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...

  9. HDU 1333 基础数论 暴力

    定义一种数位simth数,该数的各位之和等于其所有质因子所有位数字之和,现给出n求大于n的最小该种数,n最大不超过8位,那么直接暴力就可以了. /** @Date : 2017-09-08 14:12 ...

随机推荐

  1. MySQL中 如何查询表名中包含某字段的表

    查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where tabl ...

  2. Tomcat控制台总是打印日志问题的解决办法

    问题 使用gradle启动项目,在tomcat控制台中不停地打印perf4j性能日志,导致开发过程很卡很慢.明明修改了logback.xml配置文件,让它输出到log文件中,而不是控制台,但是不起作用 ...

  3. PSR-4 规范实例讲解 -- php 自动加载

    参考 参考文档:https://www.kancloud.cn/thinkphp/php-fig-psr/3144 参考实例:https://github.com/php-fig/fig-standa ...

  4. hiho1257 Snake Carpet

    题目链接:http://hihocoder.com/problemset/problem/1257 题目大意:有n条蛇 编号为1-n 每条蛇的长度跟编号相等 奇数编号的蛇必须拐奇数次(除了第一条)偶数 ...

  5. MT【301】值域宽度

    (2015浙江理科)已知函数$f(x)=x^2+ax+b,(a,b\in R)$.记$M(a,b)$是$|f(x)|$在区间$[-1,1]$上的最大值.(1)证明:当$|a|\ge2$时,$M(a,b ...

  6. MT【169】拉格朗日配方

    已知$x^2+y^2+z^2=1$求$3xy-3yz+2z^2$的最大值______ 答案:$3$ 提示:$3(x^2+y^2+z^2)-(3xy-3yz+2z^2)=3\left(y+\dfrac{ ...

  7. 给 Haproxy 创建日志文件

    背景介绍:默认下的Haproxy配置是不会生成日志文件的,而无运行日志,无法确定系统运行是否流畅,无法提起预判可能发生的故障 创建Haproxy日志文件的步骤如下vi /etc/rsyslog.con ...

  8. hexo博客添加功能

    设置Hexo主题模式 Hexo主题中,有三种不同的模式,通过切换模式,让NexT主题显示不一样的样式.在NexT根目录下有一个同样名称为_config.yml,为了区分hexo根目录下的_config ...

  9. 洛谷P4243/bzoj1558 [JSOI2009]等差数列(线段树维护差分+爆炸恶心的合并)

    题面 首先感谢这篇题解,是思路来源 看到等差数列,就会想到差分,又有区间加,很容易想到线段树维护差分.再注意点细节,\(A\)操作完美解决 然后就是爆炸恶心的\(B\)操作,之前看一堆题解的解释都不怎 ...

  10. 解决忘记mysql中的root用户密码问题

    如果忘了数据库中的root密码,无法登陆mysql. 解决步骤: 1. 使用“--skip-grant-tables”启动数据库 ~]#systemctl stop mysql ~]#mysqld_s ...