思路:第一个做法就是:每读入起始位置i和结束位置j,就从这位置i到位置j计算,可是TLE了,后面我想想要是我输入一个最长的字符串,且以最大次数计算开始位置1到结束位置100000,那么这计算量是很大的而且还是重复的。

   第二种就是:我先把这个字符串每个位置i到位置j的哈希值都计算出来,然后储存起来,可是字符串最大长度是100000,所以这个n*n的复杂度,当然还是TLE了。

   最后还是想到了线段树,而且这题还是裸的线段树,然后写出来了,可是我交了好多次都是RE!很无奈,然后看到该题的讨论版里面提到,如果起始位置超出范围,那么输出上一次的结果就可以了。然后我就加上了这个判断,结果AC了。可是题目给的数据范围是不会超出范围的啊!!是出题人的锅。当然我看到了有些大神过的还是很快的,所以原因还是有自己的一部分,不够严谨。

AC代码:

#include <cstdio>
#include <stdlib.h>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 100005;
const int MAX_NN = MAX_N*4;
const int MOD = 9973;
int value[MAX_NN], left[MAX_NN], right[MAX_NN],n,a,b,len;
char word[MAX_N];
void build(int root, int l, int r)
{
left[root] = l;
right[root] = r;
if(l == r) value[root] = word[l]-28;
else
{
int mid = (l+r)/2;
build(root*2, l, mid);
build(root*2+1, mid+1, r); value[root] = (value[root*2] * value[root*2+1] + MOD)%MOD;
} }
int query(int root, int l, int r)
{
if(left[root] == l && right[root] == r) return value[root];
else
{
int mid = (left[root]+right[root])/2; if(r <= mid) return query(root*2, l, r);
else if(l > mid) return query(root*2+1, l, r);
else return (query(root*2, l,mid) * query(root*2+1, mid+1, r) + MOD) %MOD;
}
}
int main()
{
//freopen("in.txt", "r", stdin);
int last = 0;
while(~scanf("%d", &n))
{
scanf("%s", word);
len = strlen(word);
build(1, 0, len-1); if(n == 0) puts("");
while(n--)
{
scanf("%d %d", &a, &b);
if(a > b) swap(a,b);
if( a < 1 || b > len) printf("%d\n", last); //之前老是RE,加上这个就AC了
else printf("%d\n", last = query(1,a-1,b-1));
}
}
return 0;
}

  

2016"百度之星" - 资格赛(Astar Round1) 1001的更多相关文章

  1. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

  2. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  3. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  4. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

  5. 2016"百度之星" - 资格赛(Astar Round1)

    逆元 1001 Problem A 求前缀哈希和逆元 #include <bits/stdc++.h> typedef long long ll; const int MOD = 9973 ...

  6. 2016"百度之星" - 资格赛(Astar Round1) A

    链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=690&pid=1001 我用线段树过的~可能要注意a, ...

  7. 2016"百度之星" - 资格赛(Astar Round1) 1004

    思路:题目很简单,直接用map记录每个字符串的个数就可以了.记得对每个字符串先sort(). AC代码: #include <cstdio> #include <stdlib.h&g ...

  8. 2016"百度之星" - 资格赛(Astar Round1) Problem E

    简单模拟题,耐心写就能过. #include <stdio.h> #include <math.h> #include<cstring> #include<c ...

  9. 2016"百度之星" - 资格赛(Astar Round1) Problem C

    字典树. 插入的时候update一下节点出现的次数. delete的时候,先把前缀之后的全删了.然后看前缀最后一个节点出现了几次,然后前缀上每个节点的次数都减去这个次数. 前缀从上到下再检查一遍,如果 ...

随机推荐

  1. python lcd 时间显示

    #!/usr/bin/python # QStopWatch -- a very simple stop watch # Copyright (C) 2006 Dominic Battre <d ...

  2. ASP.NET 实现PDF文件下载

    本文介绍了一种在ASP.NET中下载文件的方法. 方法一:可能是最简单的.最短的方式: Response.ContentType = "application/pdf"; Resp ...

  3. AssemblyInfo.cs文件的作用

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些參数,以下是默认的AssemblyInfo.cs文件的内容详细介绍 //是否符合公共 ...

  4. Oracle CheckPoint进程

    在实例经过分配内存结构,加载控制文件后,然后要打开数据库的时候,需要做到控制文件,数据文件,联机重做日志保持相互状态一致性,数据库才可以打开.当数据库发生实例不正常关闭时(比如系统掉电或者Shutdo ...

  5. AES算法简介

    AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...

  6. sqlite创建数据库问题

    1.<Sqlite权威指南>上说是这么创建数据库的: sqlite3 test.db 但是我写了这条语句之后出现了下面的情况(注:安装Sqlite过程见 ...) 我的sqlite3放在 ...

  7. WebAPI中Message Handler与Filter的区别

    两者最主要的区别是关注点不同.Message Handlers应用到HTTP Request,Filters仅应用到controller/action上. 如果某种行为应用到大多数的Request时, ...

  8. android R 文件生成不了

    在android中比较头疼的是R文件生成不了.今天总结一下R文件生成不了的一些原因和解决方法 1. xml文件有错, 如果在res文件中的xml文件有错,android不会自动生成R文件,此时仔细查看 ...

  9. Nutch的日志系统

    一.Nutch日志实现方式 1.Nutch使用slf4j作为日志接口,使用log4j作为具体实现.关于二者的基础,请参考 http://blog.csdn.net/jediael_lu/article ...

  10. 使用 PHP 读取文本(TXT)文件 并分页显示

    <?php //----------------you should save this file as m.php---------------- session_start(); if (e ...