나의 브을로오그으

[c++] 15829번 : Hashing 본문

알고리즘/BaekJoon

[c++] 15829번 : Hashing

__jhp_+ 2022. 5. 16. 13:32

https://www.acmicpc.net/problem/15829

 

15829번: Hashing

APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정

www.acmicpc.net

#include <iostream>
#include <string>
using namespace std;

typedef unsigned long long ULL;

ULL getHash(char c, int r, int n, int M)
{
	ULL ri = 1;
	for (int i = 0; i < n; ++i)
	{
		ri = (ri * (ULL)r) % (ULL)M;
	}
	return ((ULL)(c - 'a' + 1) * ri);
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	string word;
	ULL result = 0;
	int r = 31;
	int M = 1234567891;

	int L = 0;
	cin >> L;
	cin.ignore();
	getline(cin, word);
	for (int i = 0; i < L; ++i)
	{
		result += getHash(word[i], r, i, M);
		result %= (ULL)M;
	}

	cout << (int)result << '\n';
	return 0;
}