https://www.acmicpc.net/problem/15829
제출 코드
#include <iostream>
#include <string>
using namespace std;
long long square(int a, int b)
{
long long res = 1;
for (int i = 0; i < b; i++)
res = (res * a) % 1234567891;
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int l;
string str;
cin >> l >> str;
long long hash = 0;
for (int i = 0; i < l; i++)
{
hash = (hash + ((str[i] - 'a' + 1) * square(31, i))) % 1234567891;
}
hash = hash % 1234567891;
cout << hash;
}
자꾸 50점만 떠서 애먹었던 문제...
최대 31^49 * 26의 값을 담아둬야 해서 int 쓰던 걸 long long으로 바꾸고
중간중간 계산하면서 계속 나눠주었다
정확히 언제 언제 나눠도 되는지 잘 모르겠어서 모든 계산마다 나눠주었다...
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 2869] 달팽이는 올라가고 싶다 (0) | 2025.01.04 |
---|---|
[C++][백준 2275] 부녀회장이 될테야 (0) | 2025.01.04 |
[C++][백준 2292] 벌집 (0) | 2025.01.03 |
[C++][백준 2231] 분해합 (0) | 2025.01.03 |
[C++][백준 11050] 이항 계수1 (0) | 2025.01.03 |