时间不够了, 明天写

#include <cstdio>
#include <cstring>
#include <queue>

#define Max 1000090

void read (int &now)
{
    now = 0;
    register char word = getchar ();
    while (word < ‘0‘ || word > ‘9‘)
        word = getchar ();
    while (word >= ‘0‘ && word <= ‘9‘)
    {
        now = now * 10 + word - ‘0‘;
        word = getchar ();
    }
}

struct T_D
{
    T_D *child[26];

    T_D *Fail;
    int Count;

    int number;
    T_D ()
    {
        for (int i = 0; i < 26; i ++)
            this->child[i] = NULL;

        Count = 0;
        Fail = NULL;
        number = 0;
    }
};

int List[Max << 1];
int List_Cur;

bool visit[Max];

class AC_Type
{

    private :

        T_D *Root;
        int Trie_Count;

    public :

        void Insert (char *key)
        {
            T_D *now = Root, *pos;

            int Len = strlen (key);
            int Id;

            for (int i = 0; i < Len; i ++)
            {
                Id = key[i] - ‘a‘;
                if (now->child[Id] == NULL)
                {
                    now->child[Id] = new T_D ;
                    now->child[Id]->number = ++ Trie_Count;
                }

                now = now->child[Id];
            }
            now->Count ++;
        }

        AC_Type ()
        {
            Trie_Count = 0;
            Root = new T_D ;
            Root->number = ++ Trie_Count;
        }

        void Build_AC ()
        {
            std :: queue <T_D *> Queue;

            Queue.push (Root);

            T_D *now, *pos;
            while (!Queue.empty ())
            {
                now = Queue.front ();
                Queue.pop ();

                pos = NULL;

                for (int i = 0; i < 26; i ++)
                {
                    if (now->child[i] == NULL)
                        continue;
                    if (now == Root)
                        now->child[i]->Fail = Root;
                    else
                    {
                        for (pos = now->Fail; pos; pos = pos->Fail)
                            if (pos->child[i])
                            {
                                now->child[i]->Fail = pos->child[i];
                                break;
                            }
                        if (pos == NULL)
                            now->child[i]->Fail = Root;
                    }
                    Queue.push (now->child[i]);
                }
            }
        }

        int Query (char *key)
        {
            T_D *now, *pos;

            int Len = strlen (key);
            int Id ;

            now = Root;
            int res = 0;
            for (int i = 0; i < Len; i ++)
            {
                Id = key[i] - ‘a‘;
                for (; now->child[Id] && now != Root; now = now->Fail);

                now = now->child[Id];
                if (now == NULL)
                    now = Root;
                pos = now;
                for (; pos != Root && !visit[pos->number]; pos = pos->Fail)
                {
                    res += pos->Count;
                    visit[pos->number] = true;
                    List[++ List_Cur] = pos->number;
                }

                for (int i = 1; i <= List_Cur; i ++)
                    visit[List[i]] = false;

                List_Cur = 0;
                return res;
            }

            return res;
        }

};

AC_Type Make;

int N, Q;
char line[Max];

char __txt[Max];

int main (int argc, char *argv[])
{
    read (N);
    read (Q);
    scanf ("%s", __txt);
    for (int i = 1; i <= N; i ++)
    {
        scanf ("%s", line);
        Make.Insert (line);
    }
    for (int x, y; Q --; )
    {
        read (x);
        read (y);
        y --;
        -- x;
        int Cur = 0;
        for (int i = x; i <= y; i ++)
            line[++ Cur] = __txt[i];
        printf ("%d\n", Make.Query (line));
    }

    return 0;
}
时间: 2024-10-11 00:37:13

时间不够了, 明天写的相关文章

只学一点点:我的技术学习策略(可以参考一下:寻找遁去的一,不用管别人怎么想;有学习的时间,不如自己写、自己实践,否则学完了都不知道是什么东西)

李敖有首诗叫<只爱一点点> : 不爱那么多, 只爱一点点: 别人的爱情像海深, 我的爱情浅. 不爱那么多, 只爱一点点: 别人的爱情像天长, 我的爱情短. 不爱那么多, 只爱一点点: 别人眉来又眼去, 我只偷看你一眼. 一点足够.在黄易的大唐双龙传中有个说法叫<遁去的一>,也就是说任何事情在纷杂万象之中都有一个消失的一,把这个消失的一找到,就可以事半功倍. 在学技术中,很多人纠结于掌握与精通.掌握是能够熟练的使用该技术实现自己的目标,而精通,则是对该技术的常用及半常用的场景都熟悉,

空闲时间用C语言写了下2048游戏

本身这个游戏逻辑挺简单的,所以,不多说了,直接上代码吧 #include <climits> #include <cstdio> #include <cstring> #include <stack> #include <string> #include <map> #include <vector> #include <cmath> using namespace std; const int MAXX =

javascript的时间描述图怎么写

在gis系统中往往需要在一个时间间隔内把图形动态播放出来,比如2000年到现在地震变化啊,海啸的变化,在flex中这种展现方式需要后台rest服务相结合,要建立有时间点的图层,arcgis发布要选timeinfo属性,如果我们不用后台,数据格式是json或者xml形式应该怎么做呢,在flex中还有帧动画这个东东,在javascript应该怎么写呢,因为这个表现形式要以数据做支持,而且要在一个地图底图上叠加不断展现,现有javascript动画库是用不上了,很多都是css动画和canvas(htm

先挂着。。明天写。。

旅游 [STSR]Round #1 描述 有n-1个人要去旅游,当然他们现在在同一个出发点(点1),他们的目的地各不相同,其中第i个人要去第i个景点(点i+1),当然景点与景点之间有道路连接,通过这些道路需要一定的时间,为了赶时间也为了欣赏沿途的风景,他们约定不走原最短路的最后一条道路,但是要让旅行的时间最短. (为了保证出题人的良心程度,保证最短路径唯一) 输入格式 行1:两个整数n,m,表示n个景点,m条边. 行2..m+1行:xi,yi,ti,表示有一条从xi到yi的双向道路 输出格式 第

是好长时间没有来这里写些东西了

http://t.30edu.com/03916551/Article.do?ID=2b2d1140-8c51-4e59-9e3a-8d06de848c71 http://t.30edu.com/03916551/Article.do?ID=1f3d7f2c-1c81-4bde-afb6-c1044f4aed2d http://t.30edu.com/03916551/Article.do?ID=838bd29c-29db-4222-99e1-2ff703f00b1b http://t.30ed

尝试一下代码高亮。。成功的话明天写一篇blog

using System; using System.Collections; using UnityEngine; public class Time : MonoBehaviour { // Use this for initialization private void Start() { Debug.Log(System.DateTime.Now); Debug.Log(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

GTD时间管理(3)---行动容器分析理论法

昨天的一篇文章主要是把清空收集箱的信息,放入对应的清单容器 下面我将会对容器中的每件事经过3个维度的分析 那一个例子直接来说明 Ⅱ:如果这个事件很复杂,需要把这个事件当作一个项目进行拆分,最终量化出完成这件事需要多少个番茄. 1:拆分项目 2:各个子项目进行评估,需要评估多少时间 3:最终量化出最终时间和番茄 4:结合自身的番茄来预算自己的需要工作时间. 下面用3个维度进行分析这个项目 一: 时间维度 时间维度主要决绝于 做这件事的重要性和做 这件事需要分配多少时间. ①:事件优先性 (完成项目

day16——import、datetime获得时间、时间格式的相互转换

在日常的开发工作中,我们要写很多的Python代码,如果都写在一个文件中,会导致代码特别难维护,为了拓展代码的可维护性,我们把函数写在不同的文件里,这样每个文件包含的文件就比较少,逻辑更加清楚.在Python中,我们创建的文件基本都是以.py结尾,那一个.py的文件就称之为模块. 为了方便管理模块,Python中又引入了包(Packge)这个概念,每个包下面都有一个__init__.py文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包.__init__.py可

细思极恐-你真的会写java吗?

文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做java的同行们,只是希望读者看到此篇文章后,可以和我一样,心平气和的争取做一个优秀的程序员. 讲述方向 由于一直从事移动互联网相关工作,java开发中经常和移动端打交道或者做一些后端的工作,所以本篇文章更可能涉及和移动端的交互或者与后端的交互方式,笔者希望以自身的一些学习经验或者开发经验,可以带动认真阅读本篇文