개인 공부/코딩테스트
[미해결][Kick Start] Practice Round 2019 Kickstart Alarm :: seoftware
seowit
2020. 2. 29. 15:19
문제를 풀긴 풀었는데 어디가 문제인지 '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;
}
}