题目大意:给定一个字符串,记X[i]为包含s[i]这个字符的所有子列是回文串的个数(注意是子列而不是子串),求出所有的X[i]*(i+1),然后异或起来作为返回结果

题解:

首先用容斥来想,如果当前枚举到i

那么答案就是

1、选i作为中间的字幕,(0, i-1)和(i+1, L)这两个区间相互匹配回文

2、直接选(0, i),(i+1, L)这两个区间相互匹配回文

3、直接选(0, i-1), (i, L)这两个区间相互回文匹配

然后我们发现后两种情况会有重叠情况

我们把这两种情况更细致的分一下,(0, i), (i+1,L)如果能匹配,那么必定要找到s[j] = s[i], j是属于(i+1, L)的

然后我们这样来做

令f[l][r]表示, 只用(l, r)区间就可以构成回文串的个数

令g[l][r]表示,用(0, l), (r, L)2个区间相互回文匹配构成的个数

然后没找到一对(i, j),乘一下f[i+1][j-1], g[i-1][j+1]即可

转移:

f[l][r] = f[l+1][r] + f[l][r-1] - (s[l] == s[r] ? 0 : f[l+1][r-1])

g[l][r] = g[l-1][r] + g[l][r+1] - (s[l] == s[r] ? 0 : s[l-1][r+1])

然后就可以做了

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream> using namespace std;
typedef long long LL;
const int maxn = ;
const int MOD = 1e9 + ;
LL F[maxn][maxn], G[maxn][maxn];
string S;
LL g(int l, int r){
if(l < || r >= S.length()) return ;
if(G[l][r]) return G[l][r];
G[l][r] = ((LL)g(l-, r) + g(l, r+) - (S[l] == S[r] ? : g(l-, r+)))%MOD;
return G[l][r];
} LL f(int l, int r){
if(l > r) return ;
if(l == r) return ;
if(F[l][r]) return F[l][r];
F[l][r] = ((LL)f(l+, r) + f(l, r-) - (S[l] == S[r] ? : f(l+, r-)))%MOD;
return F[l][r];
} class PalindromicSubseq {
public:
int solve(string s) {
memset(F, , sizeof(F));
memset(G, , sizeof(G));
S = s;
LL ans = ;
for(int i = ; i < s.length(); i++){
LL temp = ;
for(int j = ; j < s.length(); j++)
if(s[i] == s[j]){
int l = min(i, j), r = max(i, j);
(temp += (LL)f(l+, r-)*g(l-, r+)%MOD) %= MOD;
}
(temp += MOD) %= MOD;
(temp *= (LL)(i+)) %= MOD;
ans ^= temp;
}
return ans;
}
};

最新文章

  1. LAMP_02_WIN下Apache安装配置
  2. 父容器根据子容器高度自适应:设置父容器 height:100%;overflow:hidden;
  3. 23 其它话题 - 《Python 核心编程》
  4. 重写UIPageControl实现自定义按钮
  5. Scala中的Apply
  6. js:语言精髓笔记6----作用域
  7. HDU3501 Calculation 2(欧拉函数)
  8. (23)odoo中的domain表达式
  9. ibatis基础
  10. java Spring 在WEB应用中的实例化
  11. Qt 操作Excel
  12. android用户界面之ScrollView教程实例汇总
  13. 介绍两个Android不常用的Drawable:GradientDrawable和 StateListDrawable
  14. SpringMVC @SessionAttributes 使用
  15. 一、程序设计与C语言
  16. ArcGIS案例学习笔记-CAD数据自动拓扑检查
  17. WPF 介绍一种在MVVM模式下弹出子窗体的方式
  18. CSS text系列
  19. BZOJ3328: PYXFIB
  20. 常见文档一览表 -httpclient

热门文章

  1. Java反射的两种使用方法
  2. Yaf学习(二)----Yaf初体验
  3. Delphi 过程类型
  4. Spark-源码-SparkContext的初始化
  5. java简单界面实现
  6. 38-JWT 设计解析及定制
  7. 2019js面试题前端必问点小视频
  8. 给socks-proxy-agent增加认证
  9. Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
  10. Qt 在控件上面绘图 label,pushbutton。。。。。