首页 > 其他分享 >2023.12.28

2023.12.28

时间:2023-12-28 10:44:41浏览次数:33  
标签:std int 2023.12 28 pos long manacher 回文

Antisymmetry

水题???

二分+哈希:对于每两个字符中间的空隙二分左右的长度,判断条件是左边的异或后的字符串与右边的没异或的字符串相不相等。

不是水题。。。

manacher:方法很简单,就是 \(1\) 对应 \(0\),\(0\) 对应 \(1\) 直接硬跑。

至于为什么对:我们设在回文串中两个以对称轴对称的位置的两个位置 \(i, j\) 且 \(i < j\),则在大回文串里的以 \(i\),\(j\) 为对称轴的回文串长度至少相等。

此题也是同理,因为翻转 \(0,1\) 并不会改变回文的性质,所以 \(i,j\) 的回文串并不会影响,所以能直接跑。

对了,注意开 long long。

#include <bits/stdc++.h>

int N;
char string[510000];

class Manacher {
public:
    char str[1010000], to[300];
    int n, pail[1010000];

    void Change(int len, char *temp) {
        to['0'] = '1';
        to['1'] = '0';
        to['#'] = '#';
        to['~'] = '~';

        str[0] = '~';
        str[++ n] = '#';
        for (int i = 1; i <= len; ++ i) {
            str[++ n] = temp[i];
            str[++ n] = '#';
        } 
    }

    void manacher() {
        for (int pos = 1, maxR = 0, mid = 0; pos <= n; ++ pos) {
            if (pos <= maxR)
                pail[pos] = std::min(pail[(mid << 1) - pos], maxR - pos + 1);
            while (str[pos - pail[pos]] == to[str[pos + pail[pos]]])
                pail[pos] ++;
            if (pos + pail[pos] - 1 > maxR) {
                maxR = pos + pail[pos] - 1;
                mid = pos;
            }
        }
    }
}manacher;

long long answer;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    std::cin >> N >> (string + 1);
    manacher.Change(N, string);
    manacher.manacher();

    for (int i = 1; i <= manacher.n; ++ i) {
        if (manacher.str[i] == '#') {
            answer += (manacher.pail[i] - 1) / 2ll;
        }
    }

    std::cout << answer << '\n';
    return 0;
}

标签:std,int,2023.12,28,pos,long,manacher,回文
From: https://www.cnblogs.com/jueqingfeng/p/17932218.html

相关文章

  • 2023.12.26——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软件案例分析明日计划:学习......
  • ORA-28365: wallet is not open
    RAC数据库启动遇到ORA-28365Oracle使用了TDE功能,加密了,没有正确打开wallet时会出现下面错误,打开钱包即可,以使用altersystemsetencryptionwalletopen;命令完成。如果打开钱包时遇到任何问题,那么可以尝试使用altersystemsetencryptionwalletopenidentifiedby"yourpa......
  • 雅礼 2023.12.27 习题课记录
    雅礼2023.12.27习题课记录前言这一场罚时多,都是一些低级错误。好吧全都是水题。水题(只放代码)莫诺卡普参加了一场编程比赛,其中包括\(26\)个问题,从A到Z命名。问题按难度排序。此外,已知莫诺卡普可以在\(1\)分钟内解决问题A,在\(2\)分钟内解决问题B,\(\dots\),在\(2......
  • 汉源高科120路128路电话光端机+1路百兆网 PCM语音电话光纤收发器光PCM128A-ETH
    128路电话光端机+1路百兆网络HY-128P1FL是汉源高科(北京)科技有限公司采用自主知识产权的大规模集成电路,应用时分复用技术,将以太网信号和电话信号混合编码后在一对光纤上传输。实现热线电话业务传输,传输通道为光传输通道。该机采用2U机架式设计,集成度高,体积小,功耗低,工作可靠,安装使用......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.27)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • LOJ-3033/QOJ-4896/南外集训 2023.12.26 T3 Alice、Bob 与 DFS
    恶魔的低语,会送来天堂的福音。题意有一个\(n\)个点的有向无环图,第\(i\)(\(1\lei\len\))个点有mi条有序的出边\(e_{i,1},e_{i,2},...,e_{i,m_i}\)。每个点要么是黑点,要么是白点。有\(k\)个程序,第\(i\)个程序形如从\(r_i\)开始,对\(r_i\)的直接或间接后继......
  • 金蝶云表单插件开发--物料清单BOM获取老系统的BOM信息【2023.12.27】
    需求:1、新系统中同一产品编码,可以通过快捷获取老系统中的同一产品编码的BOM信息;2、数据信息查询:通过存储过程去查询,再转入子项明细中;     usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Com......
  • 【2023.12.25】考研终记
    记录一下考研这两天的事情吧考前一天上午的时候早班,同事替我完成了操作下午的时候做盖章审批忙了两小时,三点多才忙完了事情准备提前去考场看看,和同事们说了下准备出门我也是第一次要翘班,同事们给了我很多鼓励,和我说先走吧没关系打印了准考证,领导看了看我的准考证,拍拍我鼓励......
  • Solution Set 2023.12.26
    [YnoiEasyRound2023]TEST_69发现若一个数被进行了一次有效操作,那么其的值至少会除以\(2\),所以一个数至多被操作\(\mathcal{O}(\loga_i)\)次。那么可以通过势能线段树维护操作,考虑什么情况下一个区间不会被操作,即\(a_i\)的值不会被改变。即对于区间的任何元素,其值均为......
  • P2865 [USACO06NOV] Roadblocks G
    原题链接题解1.在处理最短路的时候,我们采用优先队列的方法,即第一个出现的点一定是最小的,之后出现的点都是在其他点的基础上叠加的值,肯定不小于第一个。那么依然是这个思路,第二个出现的点一定是次短的。代码#include<bits/stdc++.h>usingnamespacestd;structunit{in......