题意

分析

这个数据范围容易使人想到折半搜索。

我们将字符串分为前后两部分。如果前半部分中搜得的前缀串为{S1, S2},那么后半部分中搜得的后缀串必须为{rev(S2), rev(S1)},且为有序对。对于两侧分别枚举每个字符的归属情况,hash后用map计数即可。

代码

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; int n;
string S;
string S1,S2;
map<string,ll>M; int main()
{
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
cin>>n>>S;
int ms=1<<n;
for(int s=0;s<ms;++s)
{
S1.clear(); // s1
S2.clear(); // s2
for(int i=0;i<n;++i)
{
if(s&(1<<i))
S1.push_back(S[i]);
else
S2.push_back(S[i]);
}
reverse(S2.begin(),S2.end());
++M[S1+'$'+S2]; // s1+revs2
}
ll ans=0;
for(int s=0;s<ms;++s)
{
S1.clear(); // revs1
S2.clear(); // revs2
for(int i=0;i<n;++i)
{
if(s&(1<<i))
S1.push_back(S[i+n]);
else
S2.push_back(S[i+n]);
}
reverse(S1.begin(),S1.end());
ans+=M[S1+'$'+S2]; // s1+revs2
}
cout<<ans/2<<endl;
// fclose(stdin);
// fclose(stdout);
return 0;
}

最新文章

  1. TFS API:三、TFS WorkItem添加和修改、保存
  2. test1.A[【dfs简单题】
  3. shell问题(转)
  4. linux 安装
  5. js判断滚动方向
  6. mvc中ajax.beginform一次提交重复Post两次的问题解决
  7. JAVA类与对象(二)----类定义基础
  8. qq互联(connect.qq.com)取用户信息的方法
  9. springMVC3学习(五)--MultiActionController
  10. mysql中删除表
  11. Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
  12. poj 1321 棋盘问题【dfs】
  13. Microsoft Office 2007 Professional Plus+ 正版密钥
  14. 修改IE8搜索框为指定搜索引擎,如CSDN、百度知道等
  15. 关于Android配色 自适应颜色的实现
  16. JavaScript 30 - 2 学习笔记
  17. 02函数-05-generator(ES6)
  18. js系列教程1-数组操作全解
  19. MyBatis_延迟加载01
  20. JAVA多线程之volatile 与 synchronized 的比较

热门文章

  1. 一分钟搞定:spring boot 热部署 (基于Idea)
  2. ArcGIS API for Silverlight 的重要内容******重要
  3. 2018焦作网络赛Give Candies
  4. Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)
  5. 『PyTorch』第七弹_nn.Module扩展层
  6. Eclipse重命名项目名后如何彻底修改工程名
  7. vue 表单校验(二)
  8. PHP:第一章——PHP中字符运算符、比较运算符、错误控制运算符
  9. 16 extern用法、常量字符串的应用
  10. Sysinternals Suite 2014.08.18