博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #311 (Div. 2) E. Ann and Half-Palindrome 字典树/半回文串
阅读量:4992 次
发布时间:2019-06-12

本文共 3257 字,大约阅读时间需要 10 分钟。

E. Ann and Half-Palindrome

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://codeforces.com/contest/557/problem/E

Description

Tomorrow Ann takes the hardest exam of programming where she should get an excellent mark.
On the last theoretical class the teacher introduced the notion of a half-palindrome.
String t is a half-palindrome, if for all the odd positions i () the following condition is held: ti = t|t| - i + 1, where |t| is the length of string t if positions are indexed from 1. For example, strings "abaa", "a", "bb", "abbbaa" are half-palindromes and strings "ab", "bba" and "aaabaa" are not.
Ann knows that on the exam she will get string s, consisting only of letters a and b, and number k. To get an excellent mark she has to find the k-th in the lexicographical order string among all substrings of s that are half-palyndromes. Note that each substring in this order is considered as many times as many times it occurs in s.
The teachers guarantees that the given number k doesn't exceed the number of substrings of the given string that are half-palindromes.
Can you cope with this problem?

Input

The first line of the input contains string s (1 ≤ |s| ≤ 5000), consisting only of characters 'a' and 'b', where |s| is the length of string s.

The second line contains a positive integer k —  the lexicographical number of the requested string among all the half-palindrome substrings of the given string s. The strings are numbered starting from one.
It is guaranteed that number k doesn't exceed the number of substrings of the given string that are half-palindromes.

Output

Print a substring of the given string that is the k-th in the lexicographical order of all substrings of the given string that are half-palindromes.

Sample Input

abbabaab

7

Sample Output

abaa

HINT

 

题意

定义了半回文串,即奇数位置上的数是回文的

给你个字符串,在他的子串中,让你找到第k大的半回文子串

题解:

先暴力出回文串的子串

然后强行插入字典树,再强行dfs一下

超级大暴力就好了

代码来源于http://codeforces.com/contest/557/submission/11866823

代码

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;using namespace std;//freopen("D.in","r",stdin);//freopen("D.out","w",stdout);#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)#define test freopen("test.txt","r",stdin)#define maxn 5005#define mod 10007#define eps 1e-9const int inf=0x3f3f3f3f;const ll infll = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//**************************************************************************************struct trie{ int cnt,ch[2];};int ok[maxn][maxn];trie T[maxn*(maxn+1)/2];trie null;char res[maxn];string s;int k,ts,m=-1,root,n;int newnode(){ T[++ts]=null; return ts;}void add(int i){ int cur=root; for(int j=i;j
>s>>k; n=s.size(); null.cnt=0,null.ch[0]=null.ch[1]=-1; root=newnode(); for(int len=1;len<=n;len++) { for(int i=0;i<=n-len;i++) { int j=i+len-1; if(j-i<=3) ok[i][j]=(s[i]==s[j]); else ok[i][j]=(s[i]==s[j])&&ok[i+2][j-2]; } } for(int i=0;i

 

转载于:https://www.cnblogs.com/qscqesze/p/4612230.html

你可能感兴趣的文章
纯C#的ini格式配置文件读写
查看>>
每日分享
查看>>
【干货】大数据框架整理
查看>>
年轻人,能用钱解决的,绝不要花时间(转)
查看>>
python2.7.X 升级至Python3.6.X
查看>>
VS调试方法
查看>>
jquery拖拽实现UI设计组件
查看>>
javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)...
查看>>
白话排序算法--冒泡排序
查看>>
imx6 18bit display
查看>>
Spring静态属性注入
查看>>
实验10:指针2
查看>>
【转】hibernate缓存:一级缓存和二级缓存
查看>>
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>