设第i个字母的权值为1<<i,则一个可重集合可以重排为回文串,当且仅当这个集合的异或和x满足x==x&-x,用莫队维护区间内有多少对异或前缀和,异或后满足x==x&-x,这样端点移动的代价为字符集大小+1=27,因此时间复杂度为$O(27n\sqrt{m})$

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. char buf[],*ptr=buf-;
  5. int _(){
  6. int x=,c=*++ptr;
  7. while(c<)c=*++ptr;
  8. while(c>)x=x*+c-,c=*++ptr;
  9. return x;
  10. }
  11. typedef unsigned int u32;
  12. const int P=,N=;
  13. int n,q,xs[N][];
  14. int hx[P][],idp=;
  15. int getid(int x){
  16. int w=x%P;
  17. while(hx[w][]){
  18. if(hx[w][]==x)return hx[w][];
  19. if((w+=)>=P)w-=P;
  20. }
  21. hx[w][]=x;
  22. return hx[w][]=++idp;
  23. }
  24. u32 as[N],pos[N],B,ans=,t[N*];
  25. struct Q{
  26. int l,r,id;
  27. }qs[N];
  28. bool operator<(Q a,Q b){
  29. if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
  30. if(a.r!=b.r)return (a.r<b.r)^(pos[a.l]&);
  31. return a.id<b.id;
  32. }
  33. void ins(int*x){
  34. for(int i=;i<=;++i)ans+=t[x[i]];
  35. ++t[x[]];
  36. }
  37. void del(int*x){
  38. --t[x[]];
  39. for(int i=;i<=;++i)ans-=t[x[i]];
  40. }
  41. int main(){
  42. fread(buf,,sizeof(buf),stdin)[buf]=;
  43. n=_();q=_();
  44. B=(n+)/sqrt(q+)+;
  45. for(int i=;i<=n;++i)pos[i]=i/B;
  46. while(*ptr<'a')++ptr;
  47. for(int i=;i<=n;++i)xs[i][]=xs[i-][]^<<*ptr++-'a';
  48. for(int i=;i<=n;++i){
  49. for(int j=;j<;++j)xs[i][j]=xs[i][]^<<j;
  50. }
  51. for(int i=;i<=n;++i){
  52. for(int j=;j<=;++j)xs[i][j]=getid(xs[i][j]);
  53. }
  54. for(int i=;i<q;++i){
  55. qs[i].l=_()-;
  56. qs[i].r=_();
  57. qs[i].id=i;
  58. }
  59. std::sort(qs,qs+q);
  60. int L=,R=;
  61. for(int i=;i<q;++i){
  62. int l=qs[i].l,r=qs[i].r;
  63. while(L>l)ins(xs[--L]);
  64. while(R<r)ins(xs[++R]);
  65. while(L<l)del(xs[L++]);
  66. while(R>r)del(xs[R--]);
  67. as[qs[i].id]=ans;
  68. }
  69. for(int i=;i<q;++i)printf("%u\n",as[i]);
  70. return ;
  71. }

bzoj 4866: [Ynoi2017]由乃的商场之旅的更多相关文章

  1. [bzoj4866] [Ynoi2017]由乃的商场之旅

    来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...

  2. 【莫队】bzoj4866: [Ynoi2017]由乃的商场之旅

    莫队的一些套路 Description 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你 一样,觉得这游戏很无聊,于是决定换一个商场.另一个商场是D ...

  3. BZOJ.3598.[SCOI2014]方伯伯的商场之旅(贪心 数位DP)

    题目链接 先考虑,对于确定的一个数,怎样移动代价最少(或者移到哪个位置最优)? 假设我们都移到下标\(1\)位置(设集合点为\(1\)),那么移动到下标\(2\)与\(1\)相比代价差为:\(下标&l ...

  4. BZOJ4866 Ynoi2017由乃的商场之旅(莫队)

    显然能重排为回文串相当于出现次数为奇数的字母不超过一个.考虑莫队,问题在于如何统计添加/删除一位的贡献.将各字母出现次数奇偶性看做二进制数,做一个前缀和一个后缀和.在右端添加一位时,更新区间的前缀.后 ...

  5. 【BZOJ4866】[YNOI2017] 由乃的商场之旅(莫队)

    点此看题面 大致题意: 给你一个字符串,每次给你一段区间,问这段区间内有多少个字符串在重新排列后可以变成一个回文串. 关于莫队 详见这篇博客:莫队算法学习笔记(一)--普通莫队. 关于回文 要使一个字 ...

  6. bzoj 3598: [Scoi2014]方伯伯的商场之旅【数位dp】

    参考了这个http://www.cnblogs.com/Artanis/p/3751644.html,好像比一般方法好写 大概思想就是先计算出把所有石子都合并到1位置的代价,这样显然有一些是不优的,然 ...

  7. bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...

  8. 「SCOI2014」方伯伯的商场之旅 解题报告

    「SCOI2014」方伯伯的商场之旅 我一开始的想法会被两个相同的集合位置去重给搞死,不过应该还是可以写的,讨论起来老麻烦. 可以先钦定在\(1\)号点集合,然后往后调整一部分. 具体一点,通过前缀和 ...

  9. 「SCOI2014」方伯伯的商场之旅

    「SCOI2014」方伯伯的商场之旅 题目描述 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石 ...

随机推荐

  1. Gym 101889:2017Latin American Regional Programming Contest(寒假自训第14场)

    昨天00.35的CF,4点才上床,今天打的昏沉沉的,WA了无数发. 题目还是满漂亮的. 尚有几题待补. C .Complete Naebbirac's sequence 题意:给定N个数,他们在1到K ...

  2. 陕西师范第七届K题----动态规划

    ps: 自己的方法绝对是弱爆了 肯定存在更优的方法 O(n^3)复杂度 暴力求解的.. 链接:https://www.nowcoder.com/acm/contest/121/K来源:牛客网 柯怡最近 ...

  3. inner join 与一般笛卡尔积的区别

    inner join 与一般笛卡尔积的区别:inner join是笛卡尔积的特殊形式.如果有表a和表b,表a有m条记录,表b有n条记录,则一般笛卡尔积后得到的记录条数是m*n条,记录之间的组合是随意的 ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)

    Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...

  5. 内存池技术(UVa 122 Tree on the level)

    内存池技术就是创建一个内存池,内存池中保存着可以使用的内存,可以使用数组的形式实现,然后创建一个空闲列表,开始时将内存池中所有内存放入空闲列表中,表示空闲列表中所有内存都可以使用,当不需要某一内存时, ...

  6. 实验吧—Web——WP之 因缺思汀的绕过

    首先打开解题链接查看源码: 查看源码后发现有一段注释: <!--source: source.txt-->这点的意思是:原来的程序员在写网页时给自己的一个提醒是源码在这个地方,我们要查看时 ...

  7. 《DSP using MATLAB》Problem 5.11

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  8. python------面向对象介绍之经典类与新式类的继承顺序

    一. 经典类与新式类的继承顺序 1 class A: def __init__(self): print("A") class B(A): def __init__(self): ...

  9. JSP中页面向Action传递参数的几种方式

    <form name="ThisForm" method="POST" action="index.jsp"> form是表单, ...

  10. IntelliJ IDEA备忘

    IntelliJ IDEA生成get/set方法的快捷键 IntelliJ IDEA生成get/set有2种方式,alt+enter.alt+insert.下面分别介绍这2种方式快速生成get与set ...