※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 14731번 문제인 謎紛芥索紀 (Large)이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/14731
14731번: 謎紛芥索紀 (Large)
성민이는 이번 학기에 미적분학 과목을 수강하고 있다. 다항함수의 미분 단원 과제를 하던 도중 미분을 하기가 귀찮아진 성민이는 미분하려는 함수 f(x)가 주어지면, 미분 된 함수 f’(x)를 자동
www.acmicpc.net
다항함수의 각 항 Px^K는 미분하면 각각 KPx^(K-1)이 된다는 점을 상기하자.
2^(K-1)을 1000000007로 나눈 나머지는 binary exponentiation을 이용해 빠르게 계산할 수 있다.
이와 같은 계산을 C번 반복하여 각 항의 값을 구하는 것으로 이 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
ll MOD = 1000000007;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll ans = 0;
int Q; cin >> Q;
while (Q--) {
ll C, K; cin >> C >> K;
if (K == 0) continue;
C = (C * K) % MOD;
K--;
ll sq = 2;
while (K) {
if (K & 1) C = (C * sq) % MOD;
K >>= 1;
sq = (sq * sq) % MOD;
}
ans += C;
}
cout << ans % MOD;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 5585 // C++] 거스름돈 (0) | 2022.06.19 |
---|---|
[BOJ 5588 // C++] 별자리 찾기 (0) | 2022.06.19 |
[BOJ 14729 // C++] 칠무해 (0) | 2022.06.19 |
[BOJ 5586 // C++] JOI와 IOI (0) | 2022.06.19 |
[BOJ 5587 // C++] 카드 캡터 상근이 (0) | 2022.06.19 |