나머지 연산(mod)은 분배가 가능하다는 점을 다시 되새기고 갑시다.
$$ (A+B) \bmod M=(A\bmod M+B \bmod M) \bmod M $$
$$ (A*B) \bmod M=(A\bmod M*B \bmod M) \bmod M $$
$$ (A-B) \bmod M=(A\bmod M-B \bmod M + M) \bmod M $$
A - B의 나머지를 연산하는 과정에서 자칫 음수가 나올 수 있으므로 M을 더해주었습니다.
더보기
#include <iostream>
#include <string>
using namespace std;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int l, temp;
long long res = 0;
long long r = 1;
cin >> l;
char c;
for (int i = 0; i < l; ++i) {
cin >> c;
temp = c - 'a' + 1;
res += temp * r;
r *= 31;
if (i > 6 && r >= 1234567891) r = r % 1234567891;
if (res >= 1234567891) res = res % 1234567891;
}
cout << res;
return 0;
}
'Algorithm > 백준 C++' 카테고리의 다른 글
백준 3673번 :: 나눌 수 있는 부분 수열 - C++ (0) | 2023.08.07 |
---|---|
백준 2580 : 스도쿠 - C++ (0) | 2023.05.11 |
백준 11726 : 2×n 타일링 - C++ (0) | 2023.02.05 |
백준 9095 : 1, 2, 3 더하기 - C++ (0) | 2023.02.04 |
백준 26007번 : Codepowers - C++ (0) | 2023.02.01 |
댓글