CF-557 E. Ann and Half-Palindrome(暴力Trie)

题目链接

题意

给定一个字符串,求第K个半回文子串.

半回文串:对于字符串SSS, $S_i == S_{n-i+1} ,,,i\in[{1, \frac{|s|+1}{2}]}$

思路

暴力找所有合法的区间,首先枚举长度iii,

ok[l][r]=1ok[l][r] = 1ok[l][r]=1表示区间[l,r][l,r][l,r]是一个半回文

ok[l][r]=(S[l]==R[r])&&ok[l+2][r−2]ok[l][r] = (S[l] == R[r]) \&\& ok[l+2][r-2]ok[l][r]=(S[l]==R[r])&&ok[l+2][r−2]

找到所有的区间之后在TrieTrieTrie上标记每个合法的子串,不能把所有的合法子串插入否则会超时(5000个’aaa’)

之后就dfsdfsdfs找第KKK个

#include <bits/stdc++.h>
const int maxn = 5e3 + 5;
using namespace std;
char s[maxn];
bool ok[maxn][maxn];
int k, len;
struct Trie{int nex[maxn*maxn/2][2], cnt[maxn*maxn/2], end[maxn*maxn/2], fa[maxn*maxn/2];char C[maxn*maxn/2];int p, root;int newnode() {fill(nex[p], nex[p]+2, 0);cnt[p] = end[p] = 0;return p++;}void init() {p = 0;root = newnode();}void add(int u) {int now = root;for (int i = u; i < len; ++i) {if (nex[now][s[i]-'a'] == 0) {nex[now][s[i] - 'a'] = newnode();C[p-1] = s[i];fa[p-1] = now;}now = nex[now][s[i] - 'a'];if (ok[u][i]) end[now]++;}}void print(int u) {if (fa[u]) print(fa[u]);cout << C[u];}void dfs(int u) {if (end[u]) {k -= end[u];if (k <= 0) {print(u);cout << endl;exit(0);}}for (int i = 0; i < 2; ++i) {if (nex[u][i] == 0) continue;dfs(nex[u][i]);}}
}trie;
int main() {cin >> s >> k;len = strlen(s);trie.init();for (int i = 1; i <= len; ++i) {for (int j = 0; j <= len-i; ++j) {int l = j, r = j+i-1;if (r - l <= 3) ok[l][r] = (s[l] == s[r]);else ok[l][r] = (s[l] == s[r]) && ok[l+2][r-2];// if (ok[l][r]) trie.add(l, r); 这里太sb了,超时...}}for (int i = 0; i < len; ++i) trie.add(i);trie.dfs(0); return 0;
}

CF-557 E. Ann and Half-Palindrome(暴力Trie)相关推荐

  1. GCPC 13 A Boggle 暴力,Trie剪枝

    /// 题意:字典中总共有w个单词.b次询问.每次给出一个4*4的字符矩阵. 可以从矩阵中任意一个位置开始.往相邻8个方向走.最后组成一个单词. 若组成的单词在字典中,则按其长度来计算分数.  长度3 ...

  2. string+DFS leetcode-17.电话号码下的字母组合

    题面 Given a string containing digits from 2-9 inclusive, return all possible letter combinations that ...

  3. Codeforces Round #827 (Div. 4)(A~G)(F已更新)

    "爷爷,你关注的up主要更新拉!" 今天起开始CF/At不定期更新 A. Sum(暴力) 只需判断a,b,c是否为和关系即可 #include <bits/stdc++.h& ...

  4. CF207 Div 2 题解

    为了不跌成黄名--开个小号玩Div 2--果然Div 2要舒服多了-- A:略-- B: 题意:n个人来跳舞,一共m支舞,每支舞3人,要求这3人的衣服必须一红一蓝一白.保证每支舞的3人中最多有1人是之 ...

  5. Lucky Division

    题目网址: http://codeforces.com/problemset/problem/122/A Lucky Division time limit per test 2 seconds me ...

  6. [HNOI2004]L语言

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1507  Solved: 666 [Submit][Stat ...

  7. 【JZOJ A组省选】词典

    Description Input 第一行两个数n,m,表示有n个字符串,m个询问. 接下来n行,每行一个字符串Ti . 再接下来m行,每行一个字符串Si . Output 对于每个询问,输出一个an ...

  8. GDOI2017狗带记

    高中的第一次GDOI以一种非常神奇的姿势狗带掉了,惨惨地挂着个Cu收场,怎么说,虽然很大部分的失误叫做不小心,但是仔细看看还是自己的实力不够,不可以以一句粗心就盖过. Day0: 刚刚到东莞感觉这里的 ...

  9. CF710F String Set Queries 三种解法

    本蒟蒻来介绍一下三种方法吧 codeforces 传送门 & 洛谷传送门 Solution 1(暴力&哈希) 第一种方法比较暴力,它的关键点在于: 所有字符串的总长不超过 m=3×10 ...

最新文章

  1. Silverlight4实现三维企业网站
  2. 《深入理解计算机系统》读书笔记一
  3. java 索取了多表联合查询分页,mybatis-plus多表联合分页查询
  4. leetcode 最后一个单词的长度
  5. COM 组件设计与应用(七)
  6. 运行bat批处理文件不出现黑框
  7. seo全攻略_SaaS 企业推广获客全攻略(2):如何做好企业官网?
  8. 做一个项目,平时都用到哪些工具提高效率(上)[转]
  9. python invalid literal for int_求助!运行出现错误“ValueError: invalid literal for int() ··...
  10. 00038oracle,ORACLE错误一览表
  11. ip动态分配痕迹会保留多久_段王爷《新国潮七剑》为你解剖新国潮还能潮多久?...
  12. 【英语学习】【WOTD】teem 释义/词源/示例
  13. AD下安装Exchange及简单收发邮件【视频】
  14. 剑指offer面试题[64]-数据流中的中位数
  15. iso27001标准动态
  16. 一款超强可视化报表工具:RDP报表工具
  17. 推送给自学程序员们的一本Python书
  18. ActionForm详解
  19. android 监听连续点击,android基础之点击监听器的2种监听实现
  20. R语言使用grid包的unit函数将数据对象转化为有计量单位的数据(例如转化为毫米单位、长度单位mm)

热门文章

  1. 苹果官方Instruments工具之Automation的介绍
  2. 剑指Offer_12_数值的整数次方
  3. TeeChart中 Line的Clear方法
  4. IIS发布站点错误收集(持续更新)
  5. Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
  6. Mysql时间格式转换
  7. 支持html5特性的浏览器,HTML 5浏览器的支持情况
  8. iOS之深入解析dispatch source的原理与功能
  9. LeetCode Algorithm 129. 求根节点到叶节点数字之和
  10. PAT (Basic Level) Practice (中文)1015 德才论 (25 分)