zoukankan      html  css  js  c++  java
  • BZOJ2084 [Poi2010]Antisymmetry

    首先我们重新定义0 ≠ 0, 0 = 1, 1 = 0, 1 ≠ 1,然后跑一边manacher就好啦~

    然后去现学了manacher。。。

     1 /**************************************************************
     2     Problem: 2084
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:24 ms
     7     Memory:6176 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11 #include <algorithm>
    12  
    13 using namespace std;
    14 typedef long long ll;
    15 const int N = 5e5 + 5;
    16  
    17 int n;
    18 char s[N];
    19  
    20 inline bool check(char a, char b) {
    21     return min(a, b) == '0' && max(a, b) == '1';
    22 }
    23  
    24 ll manacher(char st[], int n) {
    25     static char s[N << 1];
    26     static int rad[N << 1];
    27     int mx = 1, id = 1, i;
    28     ll res = 0;
    29     for (s[0] = '$', s[i = 1] = '#'; i <= n; ++i)
    30         s[i << 1] = st[i], s[i << 1 | 1] = '#';
    31     n = n << 1 | 1;
    32     for (i = 1; i <= n; ++i) {
    33         rad[i] = max(min(rad[id + id - i], mx - i), 0);
    34         while ((s[i + rad[i]] == '#' && s[i - rad[i]] == '#') || (check(s[i + rad[i]], s[i - rad[i]]))) ++rad[i];
    35         if (i + rad[i] > mx) mx = i + rad[i], id = i;
    36         res += rad[i] >> 1;
    37     }
    38     return res;
    39 }
    40  
    41 int main() {
    42     scanf("%d", &n);
    43     scanf("%s", s + 1);
    44     printf("%lld
    ", manacher(s, n));
    45     return 0;
    46 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    Spring Boot 应用监控
    学习学习SpringSecurity
    Spring Cloud 简介
    thinkphp 请求
    八、主从复制
    七、AOF 持久化
    五、五大数据类型实现原理
    六、RDB 持久化
    四、redis的底层数据结构
    三、五大数据类型详细用法
  • 原文地址:https://www.cnblogs.com/rausen/p/4342488.html
Copyright © 2011-2022 走看看