码迷,mamicode.com
首页 > 其他好文 > 详细

2021年ACM竞赛班训练(十一) E题 调皮的摩尔

时间:2021-06-05 18:37:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ret   http   sig   自动   acm   竞赛   tar   csdn   https   

E题 调皮的摩尔

原题链接

算法: 字符串哈希

将一个字符串转化为整数存储,同时保证字符串不同,产生的数字不同。

注意点:

1. unsigned long long

unsigned long long (\(2^{64} - 1\)), 溢出自动取模

2. 哈希值的计算方法

已知字符串\(S\), 根据\(hash[r]\)\(hash[l]\) 计算子串\(l-r\)的哈希值:
\(hash[l - r] = hash[r] - hash[l] * p^{r -l + 1}\)

代码

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    unsigned long long ans = 0;

    string s;
    cin >> s;
    unsigned long long base = 1;
    for (int i = s.size() - 1; i >= 0; i -- ){
        if (s[i] >= ‘a‘ && s[i] <= ‘z‘)
            ans = ans + base * (unsigned long long)(s[i] - ‘a‘);
        else{
            ans = ans + base * (unsigned long long)(s[i] - ‘A‘);
        }
        base = base * 26;
    }

    cout << ans << endl;

    return 0;
}

2021年ACM竞赛班训练(十一) E题 调皮的摩尔

标签:ret   http   sig   自动   acm   竞赛   tar   csdn   https   

原文地址:https://www.cnblogs.com/lhqwd/p/14852930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!