※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts