分析

似乎ttl的模拟赛t3总是折半搜索?

先把所有串转化为每个字母的0/1状态

之后我们将所有字符串分为两半

分别枚举状态

我们发现只有左右两边的字母状态相等才能保证这个集合合法

所以我们在搜左半边的时候每次加入一个pair

表示异或值为x用了y个数

搜完后先将它排序

然后搜右边的时候每次lower_bound一下即可

似乎ttl的数据比较强我的代码常数又很大,所以要开O2才能过/kk

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pi pair<int,int>
#define int long long
pi a[(<<)+];
int ans,wh[],n,m,sum[],cnt1,mx;
char s[];
inline void dfs1(int p,int lim,int now,int tot){
if(p>lim){
a[++cnt1]=mp(now,tot);
return;
}
dfs1(p+,lim,now^wh[p],tot+);
dfs1(p+,lim,now,tot);
return;
}
inline void dfs2(int p,int lim,int now,int tot){
if(p>lim){
pi *le=lower_bound(a+,a+cnt1+,mp(now,-1ll));
pi *ri=lower_bound(a+,a+cnt1+,mp(now+,-1ll));
ans+=(ri-le);
ri--;
if((ri->fi)==now)mx=max(mx,(ri->se)+tot);
return;
}
dfs2(p+,lim,now^wh[p],tot+);
dfs2(p+,lim,now,tot);
return;
}
signed main(){
int i,j,k;
scanf("%lld",&n);
for(i=;i<=n;i++){
memset(sum,,sizeof(sum));
scanf("%s",s);
m=strlen(s);
for(j=;j<m;j++)sum[s[j]-'a']^=;
for(j=;j<;j++)
wh[i]|=((<<j)*sum[j]);
}
dfs1(,n/,,);
sort(a+,a+cnt1+);
dfs2(n/+,n,,);
printf("%lld %lld\n",ans-1ll,mx);
return ;
}

最新文章

  1. 架构和模式的区别:三层架构和MVC在应用开发中的位置
  2. 处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题
  3. Linux简介及常用命令使用1--linux环境搭建
  4. ubuntu手贱改了sudoers权限之后的恢复
  5. Log4net使用笔记
  6. (转)反射发送实战(-)InvokeMember
  7. java.lang.OutOfMemoryError: GC overhead limit exceeded 问题分析和解决(转)
  8. android上下文
  9. 创建ListView控件
  10. Android studio 安装的安装一些问题
  11. 在jQuery中使用canvas时遇到的问题
  12. Hibernate HQL ②
  13. centos7下安装docker(17.3docker监控---cAdvisor)
  14. 第25月第26天 dispatch_group_t dispatch_semaphore_t
  15. 用法:node模块都具备的方法(exports、module、require、__filename、__dirname)
  16. Oracle ____Undo
  17. Makefile 中 ifeq ifneq 等用法
  18. 关于ARMv8指令的几个问题
  19. C# 时间比较方法DateTime.Compare
  20. SpringBoot之mongoTemplate的使用

热门文章

  1. Java WebService 参考文档
  2. vscode怎么修改颜色主题里的某种颜色
  3. java_第一年_JavaWeb(15)
  4. HDU-3665 Seaside
  5. (三:NIO系列) Java NIO Channel
  6. 给定两个list A ,B,请用找出 A ,B中相同的元素,A ,B中不同的元素 ??
  7. 洛谷 - P4008 - 文本编辑器 - 无旋Treap
  8. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式
  9. Log4Net 之走进Log4Net (四)
  10. C# 委托和事件 实现窗体间的通信