HDU 6345(子串查询 暴力)
题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数。
字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数。
开始时盲目暴力,直接用桶排序的做法一段一段去求,果然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(子串查询 暴力)的更多相关文章
- HDU 6345:子串查询(前缀和)
子串查询 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Sub ...
- 子串查询(二维前缀数组) 2018"百度之星"程序设计大赛 - 资格赛
子串查询 Time Limit: 3500/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- 百度之星资格赛2018B题-子串查询
子串查询 题目 度度熊的字符串课堂开始了!要以像度度熊一样的天才为目标,努力奋斗哦! 为了检验你是否具备不听课的资质,度度熊准备了一个只包含大写英文字母的字符串 A[1,n]=a1a2⋯an,接下来他 ...
- HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Total Sub ...
- hdu 4288 线段树 暴力 **
题意: 维护一个有序数列{An},有三种操作: 1.添加一个元素. 2.删除一个元素. 3.求数列中下标%5 = 3的值的和. 解题思路: 看的各种题解,今天终于弄懂了. 由于线段树中不支持添加.删除 ...
- hdu 5461 Largest Point 暴力
Largest Point Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- HDU 5908 Abelian Period 暴力
Abelian Period 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5908 Description Let S be a number st ...
- hdu 5762 Teacher Bo 暴力
Teacher Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- HDU 1333 基础数论 暴力
定义一种数位simth数,该数的各位之和等于其所有质因子所有位数字之和,现给出n求大于n的最小该种数,n最大不超过8位,那么直接暴力就可以了. /** @Date : 2017-09-08 14:12 ...
随机推荐
- web 压力测试工具
最近有收到任务,测试新服务器的性能. 花了很长时间做搜索,也整理了一些资料.以下是收集到一些简单易用的分析工具.推荐给大家使用. WebBenchhttp://www.ha97.com/4623.ht ...
- 【BZOJ3167】[HEOI2013]SAO(动态规划)
[BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][ ...
- iptables(4)规则编写
/etc/sysconfig/iptables # Generated by iptables-save v1.4.7 on Tue Mar 20 15:05:33 2018*filter:INPUT ...
- Go 语言 HTTP Server 源码分析
http://www.codeceo.com/go-http-server-code.html
- CentOS6.5安装JDK1.8
1.查看Linux自带的JDK是否已安装(如果安装则卸载CentOS已安装的低版本) 安装好的CentOS会自带OpenJdk,用命令 java -version,会有下面的信息: java -ver ...
- 洛谷P1117 优秀的拆分
题意:求一个字符串中有多少形如AABB的子串. 解:嗯...我首先极度SB的想了一个后缀自动机套线段树启发式合并的做法,想必会TLE. 然后跑去看题解,发现实在是妙不可言... 显然要对每个位置求出向 ...
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 正向选择(positive selection)、中性选择(neutral selection)、平衡选择(balancing selection)示意图
正向选择:某一位点逐渐积累,成优势的位点,具体表现为:随着时间延长,该位点的突变allele频率越来越高,远远超过野生型allele: 中性选择:随着时间的延长,总体频率没有改变太多: 平衡选择:位点 ...
- Good Bye 2018
Good Bye 2018 2018年最后一场CF,OVER! 弱弱的我只能做出3道A,B,D~~~~ 最后几分钟,感觉找到了C题的规律,结束的那一刻,提交了一发 "Wrong answer ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...