51Nod-1280-前缀后缀集合

原创 2016年08月30日 13:53:38

ACM模版

描述

描述

题解

两个数组,一个正序一个倒序,数据结构是map,不断查找匹配就行了,没啥难度,虽然用的两重循环,但是经过剪枝,其实复杂度并不高。

代码

#include <stdio.h>
#include <map>

using namespace std;

const int MAXN = 5e4 + 10;
const int OK = 999;

int A[MAXN];    //  正序
int B[MAXN];    //  逆序

int main(int argc, const char * argv[])
{
    int N;
    scanf("%d", &N);

    for (int i = 0; i < N; i++)
    {
        scanf("%d", A + i);
        B[N - 1 - i] = A[i];
    }

    long long ans = 0;
    int res = 0;
    int tag = 0;
    map<int, int> AM;
    map<int, int> BM;
    for (int i = 0; i < N; i++)
    {
        map<int, int>::iterator it = AM.find(A[i]);
        if (it != AM.end())
        {
            ans += res;
            continue;
        }
        AM[A[i]] = OK;
        bool flag = false;
        res = 0;
        for (int j = tag; j < N; j++)
        {
            map<int, int>::iterator it = AM.find(B[j]);
            if (it == AM.end())
            {
                break;
            }
            if (flag)
            {
                res++;
                continue;
            }
            BM[B[j]] = OK;
            if (BM.size() == AM.size())
            {
                res++;
                tag = j;
                flag = true;
            }
        }
        ans += res;
    }

    printf("%lld\n", ans);
    return 0;
}

参考

《ACM/ICPC竞赛之STL–map》

版权声明:听说这里让写版权声明~~~

【字符串数据结构后缀系列Part3】后缀自动机的性质和应用

学会了构建SAM之后,我们要开始学如何使用SAM来处理各种问题了. 我们先来整体看一下SAM的性质(引自2015国家集训队论文集张天扬《后缀自动机及其应用》): 1.每个状态s代表的串的长度是区...
  • CreationAugust
  • CreationAugust
  • 2015年07月24日 16:51
  • 2424

SPOJ NSUBSTR(Substrings-后缀自动机统计串出现次数-Right集合&Parent树の暴走)

8222. Substrings Problem code: NSUBSTR You are given a string S which consists of ...
  • nike0good
  • nike0good
  • 2013年08月21日 23:22
  • 2322

mysql多列索引和最左前缀

数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度。 索引优化是数据库优化的最重要手段。 如果查...
  • z69183787
  • z69183787
  • 2015年07月02日 21:55
  • 2423

51Nod-1422-沙拉酱前缀

ACM模版描述题解看到这个题,有些懵逼,没有做过类似的问题,看到讨论去有人说二分,没想通,又看到有人说离线处理,很不好意思,我概念不行,一直不懂啥叫离线,啥叫在线,于是问了问学姐,学姐说离线就是读入所...
  • f_zyj
  • f_zyj
  • 2016年09月18日 13:30
  • 349

51nod 1096 距离之和最小 && 1108-距离之和最小 V2(简单数学)&& 1110 距离之和最小 V3(逆思维)

1096 距离之和最小 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 X轴上有N个点,求X轴上一点使它到这N个点的距离之和最...
  • qq_34374664
  • qq_34374664
  • 2017年07月11日 00:18
  • 372

51Nod-1489-蜥蜴和地下室

ACM模版描述题解首先将头尾的两个弓箭手打爆,然后dfs中间的弓箭手即可。 这里需要注意,每次往后搜索N+1的条件是,第N-1个弓箭手已经被A死了,但是第N个弓箭手不要求必须死。 因为这里数据很小...
  • f_zyj
  • f_zyj
  • 2016年08月05日 00:52
  • 1281

51Nod-1350-斐波那契表示

ACM模版描述提解这道题,解法十分巧妙,思路不是自己想起来的,对斐波那契数列的性质不够了解,在相关讨论中找到一个ID为@wc的大牛的思路,然后实现了一下,大牛思路如下: 斐波那契数列定义为 ...
  • f_zyj
  • f_zyj
  • 2016年09月09日 19:15
  • 666

51Nod-1298-圆与三角形

ACM模版描述给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交。相交输出”Yes”,否则输出”No”。(三角形的面积大于0)。Input 第1行:一个数T,表示输入的测试数量(1 ...
  • f_zyj
  • f_zyj
  • 2016年07月29日 17:19
  • 924

51Nod-1174-区间中最大数

ACM模版描述给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。 例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最...
  • f_zyj
  • f_zyj
  • 2016年07月26日 14:54
  • 430

51Nod-1256-乘法逆元

ACM模版描述给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。Input 输入2个数M, N中间用空格...
  • f_zyj
  • f_zyj
  • 2016年07月29日 01:34
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51Nod-1280-前缀后缀集合
举报原因:
原因补充:

(最多只允许输入30个字)