真·美好的每一天(美好个鬼啊)

真·调了一下午

原因是,我之前移动指针时没有先扩再缩,所以导致区间是负的;但是正常来说也没事,可是这题卡常,桶我开的是 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 美好的每一天的更多相关文章

  1. B 洛谷 P3604 美好的每一天 [莫队算法]

    题目背景 时间限制3s,空间限制162MB 素晴らしき日々 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟,漫无目的的吐露爱情---现在这些漂泊不 ...

  2. 洛谷P3604 美好的每一天(莫队)

    传送门 由乃的题还是一如既往的可怕…… 先放上原题解 标解: 一个区间可以重排成为回文串,即区间中最多有一个字母出现奇数次,其他的都出现偶数次 发现这个和  类似 这样如果一个区间的  和为  或者  ...

  3. luogu P3604 美好的每一天(莫队+二进制)

    这个题还是可以的. 但是卡常卡得我心力憔悴.还是太菜了 我们把一个区间当做一个26位二进制数,每一位代表一个英文,二进制数的每一个位0代表这一位对应的字母出现了偶数次,否则出现了奇数次. 那么一个区间 ...

  4. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  5. 对于前端,「微信小程序」其实不美好

    微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...

  6. 微小,但是美好的改变 G2 2.2发布

    G2 2.2.0, 『微小,但是美好的改变.』 # 一.丰富可视化交互形式 #### 选择: [图形的单选.多选](https://g2.alipay.com/tutorial/geom-select ...

  7. NuGet 让你都美好的PM

    题外话 从前有座山,山上有座庙,庙里有个老和尚.阿阿阿,好多鱼好多余. 什么是Nuget NuGet(发音:New-Get)是一个Visual Studio的扩展.在使用Visual Studio开发 ...

  8. 设计师Yoyo:为用户设计产品,让他们生活更美好

    Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...

  9. Django学习(4)表单,让数据库更美好

    表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...

随机推荐

  1. 自定义 Word 默认的 Normal.dotm 模板、更改 Word 默认字体、更改 Word 默认样式(16)

    1. 引言 以Office 2016为例. 有没有遇见这样的问题: 每次新建一个 Word 空白文档打开后字体默认是等线,段落默认是单倍行距,默认标题也不是自己想要的样式,等一系列问题.每次打开都要调 ...

  2. python中将已有链接的视频进行下载

    使用python爬取视频网站时,会得到一系列的视频链接,比如MP4文件.得到视频文件之后需要对视频进行下载,本文写出下载视频文件的函数. 首先导入requests库,安装库使用pip install ...

  3. Golang_互斥锁

    为什么需要锁? 在并发的情况下,多个线程或协程同时去修改一个变量.使用锁能保证在某一时间点内,只有一个协程或线程修改这一变量. 锁的概念就是,我正在处理 a(锁定),你们等着,等我处理完了(解锁),你 ...

  4. Vue学习笔记(20190722)

  5. DevExtreme学习笔记(一) DataGrid中数据提交注意事项

    1.数据提交的{}数据需转化json格式 syncPost('/controller/action', { values: JSON.stringify({d:x}) }, function (res ...

  6. cefsharp System.IO.FileNotFoundException: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项。

    解决办法 安装vc++ 2015 Redistributable 64位系统安装x64 如果还报错先装x64版本再装x86版本 https://files.cnblogs.com/files/xuej ...

  7. 浅析JavaScript异步

    一直以来都知道JavaScript是一门单线程语言,在笔试过程中不断的遇到一些输出结果的问题,考量的是对异步编程掌握情况.一般被问到异步的时候脑子里第一反应就是Ajax,setTimseout...这 ...

  8. CSS中常见的布局

    一.css中常见的布局有哪些? (1)两列布局 (2)三列布局 (3)弹性布局 (4)圣杯布局 (5)双飞翼布局 二.具体实现  (1)两列布局 https://www.cnblogs.com/qin ...

  9. Jmeter学习笔记(十)——元件的作用域和执行顺序

    jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同. jmeter的test pla ...

  10. c#指定长度切割字符串,返回数组

    public List<string> subStringByCount(string text, int count) { ;//开始索引 ;//结束索引 double count_va ...