문제를 풀긴 풀었는데 어디가 문제인지 'WA(wrong answer)'가 뜬다... 혹시 코드를 보고 해결해 줄 수 있는 사람이 있을까봐 틀린 코드지만 올려놓는다.
내 생각에는 "sum += (((i+1)*(pow(i + 1, K) - 1)) / i)*(size - j)*A[j];" 여기에서 소숫점 아래 숫자가 나와서 그러는거 같은에 이거에 대한 해결 방법도 모르겠다. 다음에 다시 풀어봐야지
참고로 이용한 방법은 등비수열의 합 공식이다 Sn = An*(r^n -1) / r - 1
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(void) {
int T;
cin >> T;
for (int t = 1; t <= T; t++) {
//input
int N, K, x1, y1, C, D, E1, E2, F;
cin >> N >> K >> x1 >> y1 >> C >> D >> E1 >> E2 >> F;
vector<int> A;
A.push_back((x1 + y1)%F);
int nx, ny;
for (int n = 2; n <= N; n++) {
nx = (C * x1 + D * y1 + E1) % F;
ny = (D * x1 + C * y1 + E2) % F;
A.push_back((nx + ny)%F);
x1 = nx; y1 = ny;
}
int size = A.size();
//perform
long long int sum = 0;
for (int i = 0; i < size; i++) {
int tmp = 0;
if (i == 0) {
for (int j = 0; j < size; j++) {
sum += K*A[j]*(size-j);
}
}
else {
for (int j = i; j < size; j++) {
sum += (((i+1)*(pow(i + 1, K) - 1)) / i)*(size - j)*A[j];
}
}
}
//output
cout << "Case #" << t << ": " << (sum % 1000000007) << endl;
}
}
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][백준 1026 ][정렬] 보물 :: seoftware (0) | 2020.02.29 |
---|---|
[C++][백준 1427][정렬] 소트인사이드 :: seoftware (0) | 2020.02.29 |
[Kick Start][Practice Round 2019] Mural :: seoftware (0) | 2020.02.28 |
[C++][백준 1931][그리디 알고리즘] 회의실배정 :: seoftware (0) | 2020.02.28 |
[C++][백준 11047][그리디 알고리즘] 동전 0 :: seoftware (0) | 2020.02.26 |
댓글