https://www.acmicpc.net/problem/15829
15829번: Hashing
APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정
www.acmicpc.net
보자 마다 쉽다고 생각했는데 50 점 맞았다.
문제는 Hash값을 M으로 나누어주는 것만 생각하고 31의 거듭제곱을 나누어줄 생각을 못했다는 것이다.
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
string s;
cin >> n;
cin >> s;
int M = 1234567891;
long long hash=0,j=1;
for (int i = 0 ; i < n; i++,j*=31)
{
hash += ((s[i] - 'a'+1 )* (j%M));
j %= M;
hash %= M;
}
cout << hash;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1992 쿼드트리 c++ (0) | 2022.05.14 |
---|---|
[백준] 11286 절대값 힙 (0) | 2022.04.13 |
[백준] 10815숫자카드 c++ (0) | 2022.04.03 |
[백준]1094막대기 C++ (0) | 2022.03.30 |
[백준] 9461파도반수열 c++ (0) | 2022.03.24 |