显然的条件:必须L-R中 字符个数最多一个是奇数,其他必须是偶数

由于奇偶性可以用异或表示,区间L,R的奇偶性等于区间1,R异或区间1-(L-1)。

所以 这是个经典的解法:枚举以R为区间右端点,先求出1-R中间的字符数量的奇偶关系。

然后让所有字符全偶,且最左边的位置id,与ans取max。

然后枚举每个字符,令这个字符是奇数,其他是偶数即查询状态(tp ^ (1<<j) )的最早出现的位置。

比赛的时候想的是前缀和维护,虽然是一样的思路但写了80行,导致没调出来。。。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
//#define a(i,j) a[(i)*(m+2)+(j)]  //m是矩阵的列数
const int M = 3e5+7;
const int N =(1<<20)+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,0,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y,int z){ee[++cnt].nxt=head[x],ee[cnt].to=y,ee[cnt].val=z,head[x]=cnt;}
*/char s[M];
int mp[N];
int main()
{ios::sync_with_stdio(false);cin.tie(0);int n;cin>>n>>(s+1);memset(mp,0x3f,sizeof(mp));int tp=0,ma=0;//cout<<"ok"<<endl;mp[0]=0;for(int i=1;i<=n;i++){int ch=s[i]-'a';tp^=(1<<ch);//print(tp);ma=max(ma,i-mp[tp]);//全是偶数 for(int j=0;j<20;j++){ma=max(ma,i-mp[tp^(1<<j)]);//除了j 其他都要是偶数 //   cout<<i<<" "<<(tp^(1<<j))<<" "<<mp[tp^(1<<j)]<<"  "<<ma<<endl; }mp[tp]=min(mp[tp],i);//状态tp的位置  最左边的位置 }cout<<ma<<endl;return 0;
}

CTU Open Contest 2019 G. Beer Mugs 异或维护奇偶性相关推荐

  1. CTU Open Contest 2019

    A. Beer Barrels 题意:给出四个整数:A,B,K,C,A,B,C 都是大于 0 的个位数,问在所有仅由 A 或 B 组成的 K 位数中(K 位数的每一位都是 A 或 B),数字 C 的个 ...

  2. CTU Open Contest 2019 计蒜客重现补题报告

    个人总结 寒假过完的第一场比赛,总是有很多问题.主要有以下两点:一是寒假做题有点依赖翻译,看不下去很长的英文题面,导致这次比赛的一些题目看很长时间也没看懂.二是发现了自己的做题量仍然很少,很多题目缺乏 ...

  3. Benelux Algorithm Programming Contest 2019 G. Gluttonous Goop 思维规律题

    我们模拟后发现: 当病菌都连在一起时: 形成一个多边形,我们把他填补可以得到一个最小矩形. 把这个多边形它感染一次后:又得到一个多边形,把新的多边形填补得到新的矩形,发现:两个矩形内的未被感染的数量都 ...

  4. AtCoder Beginner Contest 215 G - Colorful Candies 2

    AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...

  5. G. Xor-MST(异或最小生成树)

    G. Xor-MST 思路 异或最小生成树,这里采用了一种分治的方法来贪心求解最值: 首先我们对所有的点权值从小到大排个序,从高位开始在中间找到一个这个位置上的0,10,10,1分界点分成两个集合,然 ...

  6. 2021年度训练联盟热身训练赛第二场(ICPC North Central NA Contest 2019,南阳师范学院),签到题ABCDEFGIJ

    A. Binarize It,简单枚举 链接:https://ac.nowcoder.com/acm/contest/12794/A 来源:牛客网 题目描述 Professor Boolando ca ...

  7. AtCoder Beginner Contest 234 G - Divide a Sequence

    AtCoder Beginner Contest 234 G - Divide a Sequence 题目 给定一个长度为N的序列,任意的将其划分为任意长度大于零的若干个子串,对于任意一个子串SiS_ ...

  8. 绝地求生6月22号服务器维护中,绝地求生2019年5月22日维护到几点?吃鸡5月22日更新内容...

    本文导航 第1页: 绝地求生5月22日更新 第8页: 改善降落时界面 第2页: 绝地求生PC1.0第29轮更新内容 第9页: 改善信号枪显示界面 第3页: 生存通行证3:百搭牌 第10页: 自定义比赛 ...

  9. 梦想世界 2014年8月14日服务器维护公告,2019年8月22日维护公告

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 <梦想世界>2019年8月22日维护内容如下: 本周更新内容摘要: 1.天选之战全明星争霸赛开放报名和竞猜玩法 2.调整了帮派降妖宝箱奖励发放 ...

  10. 6月27日服务器例行维护公告,2019年06月27日维护公告

    原标题:2019年06月27日维护公告 亲爱的玩家: 为了保证服务器的稳定和服务质量,<大话西游2经典版>将于2019年06月27日(本周四)早上8:00停机,进行每周例行的维护工作,预计 ...

最新文章

  1. PHP程序员学习路线
  2. C++vector容器-互换容器
  3. 2003文件共享服务器搭建,用Windows Server 2003搭建安全文件服务器(2)
  4. php 取得文件行数,PHP获取文件行数的方法
  5. Python开发Http代理服务器 - socketref,呆在autonavi.com - C++博客
  6. Typora的使用方法
  7. HDU 2079 选课时间(题目已修改,注意读题)(母函数)
  8. 基于华为云ModelArts(实现垃圾分类识别)
  9. 计算机wifi无法打开,教你win10系统WiFi热点无法打开的修复教程
  10. 简单明了理解交叉验证
  11. 【渝粤题库】陕西师范大学201601《中国古代文学(三)》作业 (高起本)
  12. WordPress好看的自适应企业站Start主题
  13. 《Android深度探索卷一》读书笔记六
  14. SOA服务颗粒度(粗粒度、细粒度)与解耦
  15. 细粒度检索SCDA 详解
  16. SRS搭建流媒体服务器
  17. 抖音运营规则讲解系列(4):涉嫌药物,刀具器械被封丨国仁网络
  18. 怎么做gif图?你知道好用的制作方法吗?
  19. mysql常见命令,查看数据库版本信息
  20. Juniper Junos接口划vlan的方法

热门文章

  1. 2021平凉二中高考成绩查询,平凉二中召开2020届高考启动暨教学工作推动会
  2. [1-1] 把时间当做朋友(李笑来)Chapter 1 【心智的力量】 摘录
  3. (GIS可视化)热力图
  4. 【源码】日历转换器:格里高利历、波斯历和伊斯兰历法
  5. Roman number -- 罗马数字
  6. Mac电脑C盘空间不足怎么办?
  7. PS长图快速切片_PS拼图软件
  8. 计算机的数字符号化是什么,电脑输入数字变成符号怎么办
  9. 亮瞎眼的十六进制颜色代码表
  10. matlab复合梯形法,matlab实现复合梯形法则