现在看这道题也不难啊,不知道考场上为啥没切~

code:

#include <bits/stdc++.h>
#define N 5006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
struct trie
{
int size,tag,ch[2];
}p[N*2500];
char S[N];
int f[N][N],tot;
void dfs(int u)
{
p[u].size=p[u].tag;
for(int i=0;i<2;++i)
{
if(p[u].ch[i])
{
int v=p[u].ch[i];
dfs(v);
p[u].size+=p[v].size;
}
}
}
void dfs2(int u,int kth)
{
kth-=p[u].tag;
if(kth<=0)
{
exit(0);
}
for(int i=0;i<2;++i)
{
if(p[u].ch[i])
{
int v=p[u].ch[i];
if(kth>p[v].size) kth-=p[v].size;
else {
printf("%c",i+'a');
dfs2(v, kth);
break;
}
}
}
}
int main()
{
int i,j,n,k,rt=0;
// setIO("input");
scanf("%s%d",S+1,&k);
n=strlen(S+1);
for(i=1;i<=n;++i) f[i][i]=1;
for(i=n-1;i>=1;--i)
{
for(j=i+1;j<=n;++j)
{
if(j-2>=i+2)
{
if(S[i]==S[j] && f[i+2][j-2]) f[i][j]=1;
}
else
{
if(S[i]==S[j]) f[i][j]=1;
}
}
}
for(i=1;i<=n;++i)
{
rt=0;
for(j=i;j<=n;++j)
{
int c=S[j]-'a';
if(!p[rt].ch[c])
{
p[rt].ch[c]=++tot;
}
rt=p[rt].ch[c];
p[rt].tag+=f[i][j];
}
}
dfs(0);
dfs2(0,k);
return 0;
}

  

CF557E Ann and Half-Palindrome 字典树+dp的更多相关文章

  1. Codeforces Round #311 (Div. 2) E - Ann and Half-Palindrome(字典树+dp)

    E. Ann and Half-Palindrome time limit per test 1.5 seconds memory limit per test 512 megabytes input ...

  2. Manthan, Codefest 16 C. Spy Syndrome 2 字典树 + dp

    C. Spy Syndrome 2 题目连接: http://www.codeforces.com/contest/633/problem/C Description After observing ...

  3. UVALive 3942 Remember the Word 字典树+dp

    /** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5) ...

  4. LA 3942 - Remember the Word (字典树 + dp)

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. HDU5715 XOR 游戏 二分+字典树+dp

    当时Astar复赛的时候只做出1题,赛后补题(很长时间后才补,懒真是要命),发现这是第二简单的 分析: 这个题,可以每次二分区间的最小异或和 进行check的时候用dp进行判断,dp[i][j]代表前 ...

  6. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

  7. UVALive 3942 字典树+dp

    其实主要是想学一下字典树的写法,但这个题目又涉及到了DP:这个题目要求某些单词组成一个长子串的各种组合总数,数据量大,单纯枚举复杂度高,首先肯定是要把各个单词给建成字典树,但是之后该怎么推一时没想到. ...

  8. CF456D A Lot of Games (字典树+DP)

    D - A Lot of Games CF#260 Div2 D题 CF#260 Div1 B题 Codeforces Round #260 CF455B D. A Lot of Games time ...

  9. LA 3942 - Remember the Word 字典树+DP

    看题传送门:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...

随机推荐

  1. Spring (4)框架

    Spring第四天讲义 今日内容 Spring的事务管理 Spring和MyBatis框架的集成 1. Spring的事务管理 1.1. 事务是什么? 在操作数据库时(增删改),如果同时操作多次数据, ...

  2. javaSE面试题总结

      目 录 第一章 初识Java 1 1. Java跨平台原理(字节码文件.虚拟机) 1 2. Java的安全性 1 3. Java三大版本 2 4. Java开发运行过程 2 5. Java开发环境 ...

  3. APK反编译教程

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  4. MongoDB操作-备份和恢复

    Mongodb数据库操作-备份 恢复 导出 导入 mongodb数据备份和恢复主要分为二种:一种是针对库的mongodump和mongorestore,一种是针对库中表的mongoexport和mon ...

  5. 2019杭电多校一 K. Function (数论)

    大意: 给定$n(n\le 10^{21})$, 求$\sum\limits_{i=1}^n gcd(\lfloor\sqrt[3]{i}\rfloor,i)\mod 998244353$ 首先立方根 ...

  6. C# DataTable和List转换操作类

    using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...

  7. leetcode-21.合并有序链表 · List

    题面 合并两个排序链表. 算法 创建结果链表头*res,*p指向头,当两个链表节点都不为空时,比较节点值,值小的挂在p后面,二者(p和小者)顺次后移.知道某条链表空,跳出while循环.接着,直接将不 ...

  8. LINUX档案权限

    一.ls命令显示目录详细信息 列表显示目录内容 : ls drwxr-xr-x.  4 root   root       4096 Jun 26 02:07 acpi -rw-r--r--.  1 ...

  9. orecle 查询数量 union合并 的排序问题

    orecle  查询数量 union合并 之后按照从小到大排序了,这边需要不排序的 直接将union  改成union all 就解决了. 图就不传了,验证没问题

  10. WebApplication 启动类一定要存于某个包下

    否则spring启动器 无法识别 包类目录