CoFun 1613 单词连接
Description
Stan有N个不同的单词,这天,Stan新结交的两个朋友来他这里玩,Stan作为主人,他需要送给他们单词,但由于Stan不能偏心,所以Stan给每个单词一个权值v_i,他需要他这N个单词恰好分配给这两个朋友,这个地方的人很奇怪,他们用来定义自己的喜悦值的方式是把所有得到的单词的权值都位运算and起来的值,所以你需要使得两个朋友的喜悦值是相同的。
好学的Stan不满足于求出一种方案,而是想要知道总共有多少种方案数,Stan觉得这个太简单了,所以请你来帮他解决吧。
Input Format
第一行包含一个整数N
第二行包含N个非负整数,表示每个单词的权值
Output Format
输出仅一行,即方案数
思路:对于每两个字符串,我们考虑A是较小的那个,B是较大的那个,如果AB是回文串,那么BA也一定是回文串。
所以,假如A是B的前缀,那么B中从len(A)+1到len(B)的部分,若为回文串,那么AB和BA就是子串,因此,我们用manacher预处理是否回文,用字典树维护字典,注意要用链表写字典树才不会爆空间。
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#define ll long long
char S[],ss[];
int p[],g[],s[];
int tot,go[],first[],next[],val[],cnt[];
int num[],len[],n;
void manacher(int Len){
int l=;
S[l]='#';
for (int i=;i<=Len;i++)
S[++l]=ss[i],S[++l]='#';
int id=,mx=;p[]=;
for (int i=;i<=l;i++){
if (mx>=i)
p[i]=std::min(mx-i+,p[id*-i]);
else
p[i]=;
while (p[i]+i<=l&&i-p[i]>&&S[p[i]+i]==S[i-p[i]]) p[i]++;
if (i+p[i]->mx) mx=i+p[i]-,id=i;
}
//g[0]=1;
for (int i=;i<Len;i++)
if (p[i]>=i)
g[Len-i]=;
else
g[Len-i]=;
g[Len]=;
}
void insert(int id){
int now=;
manacher(len[id]);
for (int i=;i<=len[id];i++){
int k;
for (k=first[now];k!=;k=next[k])
if (val[k]==s[i]) break;
if (!k){
tot++;
val[tot]=s[i];
next[tot]=first[now];
first[now]=tot;
cnt[tot]=g[i];
now=tot;
}else{
cnt[k]+=g[i];
now=k;
}
}
num[now]++;
}
int main(){
scanf("%d",&n);
for (int i=;i<=n;i++){
scanf("%d",&len[i]);
scanf("%s",ss+);
for (int j=;j<=len[i];j++)
s[j]=ss[j];
insert(i);
}
ll ans=;
for (int i=;i<=tot;i++)
ans+=(ll)num[i]*num[i]+(ll)cnt[i]*num[i]*;
printf("%lld\n",ans);
}
CoFun 1613 单词连接的更多相关文章
- poj1386单词连接(欧拉欧拉欧拉)
///单词连接,欧拉回路通路都可以(有向图) ///主要构图:比如possibilities就构造p->s的边////题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词 ...
- CoFun 1612 单词分组(容斥)
Description Stan有N个不同的单词,这天,Stan新结交的两个朋友来他这里玩,Stan作为主人,他需要送给他们单词,但由于Stan不能偏心,所以Stan给每个单词一个权值v_i,他需要他 ...
- CSS 类名的单词连字符:下划线还是连接符?
本文的部分内容整理自我对此问题的解答: 命名 CSS 的类或 ID 时单词间如何连接? - 知乎 问题 CSS 类或 ID 命名时单词间连接通常有这几种写法: 驼峰式: solutionTitle.s ...
- [转]CSS 类名的单词连字符:下划线还是横杠?
问题 CSS 类或 ID 命名时单词间连接通常有这几种写法: 驼峰式: solutionTitle.solutionDetail 用横杠连接: solution-title.solution-deta ...
- [leetcode]30. Substring with Concatenation of All Words由所有单词连成的子串
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- 蓝桥杯—ALGO-18 单词接龙(DFS)
问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母, 要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次) ,在两个单词相连时,其 ...
- Luogu-3966 [TJOI2013]单词
这道题应该是后缀数组的套路题啊,把单词连接起来,中间用没有出现过且互不相同的字符来分隔开,求一下\(height\)数组. 对于一个单词来说,设单词长\(len\),所在的后缀为\(i\),如果某后缀 ...
- Leetcode 472.连接词
连接词 给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词. 连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的. 示例: 输入: ["cat" ...
- [NOIP2000] 提高组 洛谷P1019 单词接龙
题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...
随机推荐
- 单片机串口通讯RXD与TXD如何对接详解
相信很多人都对单片机与计算机或者芯片通信时,RXD与TXD如何连接比较困惑.因为在一些电路图中,有的是直连接法,有的是交叉接法,让人有点摸不着头脑. 首先需要明白两个概念,就是DTE和DCE.DTE是 ...
- Python 坑爹之 代码缩进
建议:统一使用空格!!!!!!!!!不要Tab Python代码缩进 这两天python-cn邮件列表有一条thread发展的特别长,题目是<python的代码缩进真是坑爹>(地址), ...
- HP的笔记本经常蓝屏崩溃 -------athr.sys
因为windows 7才新装不久,没有时间下载配置什么符号表,直接临时下载了WinDbg分析下Dump文件, Probably caused by : athr.sys ( athr+428a5 ) ...
- Spring注解 @Resource和@Autowired
@Resource和@Autowired两者都是做bean的注入使用.其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入.但是Spri ...
- Html5/Css3 向下兼容placeholder
Css3下input标签的placeholder属性在IE10以下是不兼容的,页面加入这段JS脚本后,能够兼容IE6+ //@charset "utf-8"; /** * jque ...
- bzoj1148
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1148 很常见的排序贪心题...... 假设我们得到了一个最优序列,记s[n]=w[1]+w[2 ...
- bzoj有趣的题目
你会发现bzoj上好多题AC率高的让人不敢想象 其实是因为数据没发,所以被n个人水过了-- 1142 1167 1351 1354 1359 1482 2812 3056 1469 我有特殊的减少代码 ...
- Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统
- hibernate错题解析
01 Hibernate错题分析 解析: 此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通 ...
- Javascript:字符串分割split()妙用
概述: split() 方法将字符串分割为字符串数组,并返回此数组 语法格式: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...