P3604 美好的每一天
真·美好的每一天(美好个鬼啊)
真·调了一下午
原因是,我之前移动指针时没有先扩再缩,所以导致区间是负的;但是正常来说也没事,可是这题卡常,桶我开的是 unsigned short
,于是区间是负的,自然桶中会有负数,负数爆成正的爽(雾)。
显然一段区间是回文的当且仅当至多有一个字母出现奇数次,于是我们尝试用异或去解这道题。
我们还是类似前缀异或的思路来取出区间异或值,并枚举多出来的字母是哪个即可(这样会T)。
于是我们可以在最开始预处理出有用的状态,就是满足 \(a[i] \bigoplus (1<<i)\) 是存在的状态存起来即可。(其实跑满好像是一样的)
比较暴力的写法。
inline void add(int x) {
anss+=c[a[x]]++;
for(R i=0;i<L;++i)
anss+=c[a[x]^(1<<i)];
}
inline void sub(int x) {
anss-=--c[a[x]];
for(R i=0;i<L;++i)
anss-=c[a[x]^(1<<i)];
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<bitset>
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char s; while(!isdigit(s=getchar())) f=s=='-'?-1:f;
do x=x*10+(s^48); while(isdigit(s=getchar())); return x*f;
} const int N=60001,M=(1<<26)+1,L=26;
#define u16 unsigned short
struct node { int l,r,id,pos;
inline bool operator < (const node& that) const
{return pos==that.pos?pos&1?r<that.r:r>that.r:l<that.l;}
}q[N];
int n,m,B,a[N];
int anss,ans[N],d[N][L];
bitset<M> tg;
char s[N],cnt[N]; u16 c[M];
inline void add(int x) {
anss+=c[a[x]]++;
for(R i=0;i<cnt[x];++i)
anss+=c[d[x][i]];
}
inline void sub(int x) {
anss-=--c[a[x]];
for(R i=0;i<cnt[x];++i)
anss-=c[d[x][i]];
}
inline void main() {
n=g(),m=g(),scanf("%s",s+1);
B=sqrt(n+1); tg[0]=1;
for(R i=1;i<=n;++i) tg[(a[i]=a[i-1]^(1<<(s[i]-'a')))]=1;
for(R i=0;i<=n;++i) for(R j=0,t=1;j<L;++j,t<<=1)
if(tg[a[i]^t]) d[i][cnt[i]++]=a[i]^t;
for(R i=1;i<=m;++i)
q[i].l=g()-1,q[i].r=g(),q[i].id=i,
q[i].pos=q[i].l/B;
sort(q+1,q+m+1);
for(R i=1,l=1,r=0;i<=m;++i) {
while(l>q[i].l) add(--l); while(r<q[i].r) add(++r);
while(l<q[i].l) sub(l++); while(r>q[i].r) sub(r--);
ans[q[i].id]=anss;
}
for(R i=1;i<=m;++i) printf("%d\n",ans[i]);
}
} signed main() {Luitaryi::main(); return 0;}
2019.11.25
P3604 美好的每一天的更多相关文章
- B 洛谷 P3604 美好的每一天 [莫队算法]
题目背景 时间限制3s,空间限制162MB 素晴らしき日々 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟,漫无目的的吐露爱情---现在这些漂泊不 ...
- 洛谷P3604 美好的每一天(莫队)
传送门 由乃的题还是一如既往的可怕…… 先放上原题解 标解: 一个区间可以重排成为回文串,即区间中最多有一个字母出现奇数次,其他的都出现偶数次 发现这个和 类似 这样如果一个区间的 和为 或者 ...
- luogu P3604 美好的每一天(莫队+二进制)
这个题还是可以的. 但是卡常卡得我心力憔悴.还是太菜了 我们把一个区间当做一个26位二进制数,每一位代表一个英文,二进制数的每一个位0代表这一位对应的字母出现了偶数次,否则出现了奇数次. 那么一个区间 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 对于前端,「微信小程序」其实不美好
微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...
- 微小,但是美好的改变 G2 2.2发布
G2 2.2.0, 『微小,但是美好的改变.』 # 一.丰富可视化交互形式 #### 选择: [图形的单选.多选](https://g2.alipay.com/tutorial/geom-select ...
- NuGet 让你都美好的PM
题外话 从前有座山,山上有座庙,庙里有个老和尚.阿阿阿,好多鱼好多余. 什么是Nuget NuGet(发音:New-Get)是一个Visual Studio的扩展.在使用Visual Studio开发 ...
- 设计师Yoyo:为用户设计产品,让他们生活更美好
Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...
- Django学习(4)表单,让数据库更美好
表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...
随机推荐
- C 风格字符串、string 类要点总结
1. C风格字符串 1.1 其它 头文件<cstring> 特殊性质:C风格字符串以空字符\0结尾 1.2 读取一行的区别 1.2.1 cin.getline(array1,n,char) ...
- [洛谷P5304][GXOI/GZOI2019]旅行者
题目大意: 有一张 \(n(n\leqslant10^5)\) 个点 \(m(m\leqslant5\times10^5)\) 条边的有向有正权图,有$k(2\leqslant k\leqslant ...
- TJOI2019
TJOI出一堆模板题还玩一堆梗是什么鬼 甲苯先生的字符串(矩阵快速幂) 矩阵快速幂模板题 代码 甲苯先生的滚榜(树状数组.线段树) 最开始想平衡树搞,但是平衡树太难写了 一次答案的查询相当于查询比当前 ...
- C++使用代码创建一个Windows桌面应用程序
WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HINSTANCE hInstancem HINSTANCE hPreInstance, ...
- JavaScript字符串Format
一直用C#编程,在日常字符串拼接中string.Format()一直是个很好用很常用的方法,不用自己+++,既影响开发效率也影响可读性 然而在js中并没有这样的函数可供使用,so整理了一个js的字符串 ...
- Vue的11个生命周期函数的用法
实例的生命周期函数(官方11个):beforeCreate:在实例部分(事件/生命周期)初始化完成之后调用.created:在完成外部的注入/双向的绑定等的初始化之后调用.beforeMount:在页 ...
- ABAP-Eclipse ADT中创建ABAP CDS视图
Create an ABAP Project in ABAP Development Tools (ADT): https://developers.sap.com/tutorials/abap-cr ...
- org.springframework.dao.DuplicateKeyException: 问题
转自:https://blog.51cto.com/chengxuyuan/1786938 org.springframework.dao.DuplicateKeyException: a diffe ...
- [MySQL]重装数据库后无法启动服务
具体情况请查看下面网址 https://www.jianshu.com/p/8dda50ee812f 错误信息可以在CMD里输入mysqld --console查看
- Linux环境下安装RabbitMQ
首先RabbitMQ是使用erLang编写的开源消息中间件.所以需要先安装erlang环境. 我使用的是CentOS的系统安装erlang21.0的步骤如下: #下载安装包 (下面是我用的比较匹配的版 ...