본문 바로가기
개인 공부/코딩테스트

[미해결][Kick Start] Practice Round 2019 Kickstart Alarm :: seoftware

by seowit 2020. 2. 29.

문제를 풀긴 풀었는데 어디가 문제인지 '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;

	}
}

댓글