"蔚来杯"2022牛客暑期多校训练营9 G Magic Spells【马拉车+哈希】
四川今天又上热搜了,继南部疫情的未雨绸缪后,龙槽沟是真的倾盆大雨了。我没有兴趣虚伪矫情地对罹难的游人表达同情,因为人与人互不相通徒增谈资;我也没有兴趣居高临下地对擅闯的愚人表达不屑,因为你我皆为乌合之众,在流媒体的灯红酒绿下娱乐至死。地球上最聪明的大脑像条二极管,只能接受最简单的二元判断,稍微复杂的变量就足以使之熔断。基础工作人员与群众大抵是存在着些割裂的,只要就着喇叭喊叫,就一定是在表达“认同你”或“否定你”其一,绝无“陈述事实”一说。学了几十年逻辑,还是顺应情绪,不断窥视大众行为决断,也是,法不责众嘛。有人扭曲身形挤进人群刷安全感,有人刻意和大众对立谋求优越感,殊途原来也是可以同归的呵。
亚当夏娃唉声叹气
达尔文骂骂咧咧地投靠上帝
hash求子串可以O(1),
$click$ $for$ $codes$
# include "bits/stdc++.h"
using namespace std;
constexpr int N = 3e5 + 3;
char str[N], str_new[N << 1];
int main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n;
    cin >> n;
    unordered_map<unsigned long long, int> mp;
    unordered_map<unsigned long long, int> mp2;
    unordered_map<unsigned long long, bool> vis[6];
    unordered_map<unsigned long long, bool> vis2[6];
    int ans = 0;
    str_new[0] = '!';
    str_new[1] = '@';
    for(int i = 1; i <= n; ++i) {
        cin >> str + 1;
        int len = strlen(str + 1);
        int len_new = 1;
        for(int j = 1; j <= len; ++j) {
            str_new[++len_new] = str[j];
            str_new[++len_new] = '@';
        }
        str_new[++len_new] = '#';
        int r = 0, center;
        vector<int> p(len_new + 1 << 1);
        vector<int> pos;
        for(int j = 1; j <= len_new; ++j) {
            p[j] = (j < r) ? min(p[(center << 1) - j], r - j) : 1;
            while(str_new[j - p[j]] == str_new[j + p[j]]) ++p[j];
            if(r < j + p[j]) {
                r = j + p[j];
                center = j;
            }
            if(p[j] > 1) pos.push_back(j);
        }
        constexpr unsigned long long base = 122777, mod = 91815541, mod2 = 19260817; // hash value, which is indescibable
        vector<unsigned long long> h(len + 1), b(len + 1), h2(len + 1), b2(len + 1);
        b[0] = 1, b2[0] = 1;
        for(int i = 1; i <= len; ++i) {
        	h[i] = (h[i - 1] * base % mod + (unsigned long long) str[i]) % mod;
        	h2[i] = (h2[i - 1] * base % mod2 + (unsigned long long) str[i]) % mod2;
        	b[i] = b[i - 1] * base % mod;
        	b2[i] = b2[i - 1] * base % mod2;
		}
		auto hash = [&](int l, int r) -> unsigned long long {
			return (h[r] - h[l - 1] * (unsigned long long)b[r - l + 1] % mod + mod) % mod;
		};
		auto hash2 = [&](int l, int r) -> unsigned long long { // double hash reduces chance and thus improves accuracy
			return (h2[r] - h2[l - 1] * (unsigned long long)b2[r - l + 1] % mod2 + mod2) % mod2;
		};
        for(auto j : pos) {
            int len = p[j];
            while(len) {
            	if((j - len + 2 >> 1) > (j + len - 2 >> 1)) break; // from several manual simulations, we'll find that the palindrome string centered on i in the new string is (i - p[i】 + 2) / 2 ---> (i + p[i] - 2) / 2 in the corresponding position in the original string
                unsigned long long sub_str_1 = hash( (j - len + 2 >> 1), (j + len - 2 >> 1) );
                unsigned long long sub_str_2 = hash2( (j - len + 2 >> 1), (j + len - 2 >> 1) );
                if(vis[i][sub_str_1] == true && vis2[i][sub_str_2] == true) break;
                vis[i][sub_str_1] = vis2[i][sub_str_2] = true;
                ++mp[sub_str_1], ++mp2[sub_str_2];
                if(mp[sub_str_1] >= n && mp2[sub_str_2] >= n) ++ ans;
                len -= 2; // manachar only directly finds the longest palindrome string, but the string may contain other substrings
                if(len < 0) break;
            }
        }
    }
    cout << ans;
    return 0;
}
/*
9999
abcba
abcccba
*/

"蔚来杯"2022牛客暑期多校训练营9 G Magic Spells【马拉车+哈希】的更多相关文章
- 蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
		
比赛链接 A 题解 知识点:图论,dp. 暴力建图,连接所有点的双向通路,除了原点是单向的,并且把路径长度作为权值. 随后,从原点出发(\(f[0] = 0\),其他点负无穷,保证从原点出发),按照权 ...
 - 蔚来杯2022牛客暑期多校训练营6 ABGJM
		
比赛链接 A 题解 知识点:数学,构造. 题目要求构造一个长为 \(m\) 的序列 \(c\) ,\(m\) 自选,使得 \(c\) 的无限循环序列 \(b\) 中任意连续 \(a_i\) 个数中都存 ...
 - 蔚来杯2022牛客暑期多校训练营7 CFGJ
		
比赛链接 C 题解 方法一 知识点:思维. 先统计没有出现的数,每个都可以随便放,所以作为补位用的. 将原数组左移一位作为预定的答案数组,然后开始检查.如果和原数组一样,则用补位数字填充,如果不一样就 ...
 - 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
		
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
 - 2021牛客暑期多校训练营3 J 思维
		
传送门 J-Counting Triangles_2021牛客暑期多校训练营3 (nowcoder.com) 题目 Goodeat finds an undirected complete graph ...
 - B-xor_2019牛客暑期多校训练营(第四场)
		
题意 给出n个数组(每组数个数不定),m个询问 l, r, x 序号在区间\([l,r]\)的每个数组是否都可以取出任意个数异或出x 题解 判断一个数组能否异或出x,是简单的线性基问题 判断多个线性基 ...
 - 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
		
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
 - 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
		
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
 - 2019牛客暑期多校训练营(第一场) B	Integration (数学)
		
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
 
随机推荐
- 总结 到 GDOI 2021 这个阶段
			
截止本蒟蒻第一次体验省选(虽然是普及组) 本蒟蒻已经有了许多收获,却也有很多不足 优点 对一些学过的知识掌握还行 没了 缺点 会却做不出来 有一些题不难,却想不到正解 如 Day2 T1 ,就是移一下 ...
 - layui 数据表格 数据更新完成后数据刷新
			
模拟点击分页确定刷新数据 $(".layui-laypage-btn")[0].click()
 - vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9
			
项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...
 - 『忘了再学』Shell流程控制 — 38、while循环和until循环介绍
			
目录 1.while循环 2.until循环 1.while循环 对while循环来讲,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.和for循环的第二种格式for((初始 ...
 - Error: $injector:modulerr Module Error
			
Failed to instantiate module app due to://实例化失败 Error: [$injector:modulerr] http://errors.angularjs. ...
 - UiPath官网认证中文教程
			
RPA之家公众号:RPA之家 RPA之家官网:http://rpazj.com 斗鱼直播:http://www.douyu.com/rpazj UiPath中文社区QQ群:465630324 RPA& ...
 - idea显示 RunDashboard ,多个启动项时列表显示
			
在.idea(项目所在文件夹中)下的workspace.xml文件中找到 <component name="RunDashboard"> 标签,然后添加如下节点 < ...
 - vue2.0 双向绑定原理分析及简单实现
			
Vue用了有一段时间了,每当有人问到Vue双向绑定是怎么回事的时候,总是不能给大家解释的很清楚,正好最近有时间把它梳理一下,让自己理解的更清楚,下次有人问我的时候,可以侃侃而谈. 一.首先介绍Obje ...
 - 重磅硬核 | 一文聊透对象在 JVM 中的内存布局,以及内存对齐和压缩指针的原理及应用
			
欢迎关注公众号:bin的技术小屋 大家好,我是bin,又到了每周我们见面的时刻了,我的公众号在1月10号那天发布了第一篇文章<从内核角度看IO模型的演变>,在这篇文章中我们通过图解的方式以 ...
 - .NET(C#)发送邮件的实现方法
			
.NET(C#)发送邮件的实现方法 微软已经为我们准备好了现成的工具类供我们调用: MailMessage //邮件信息类 SmtpClient //邮件发送类 首先需要在项目的类文件中引用以下命名空 ...