제출 #1192395

#제출 시각아이디문제언어결과실행 시간메모리
1192395lance0말 (IOI15_horses)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

long long fast_expo(long long x, long long y, long long mod) {
	long long ans = 1;
	long long mult = x;
	while (y > 0) {
		if (y % 2) {
			ans = (ans*mult) % mod;
		}
		mult = (mult*mult) % mod;
		y = y >> 1;
	}
	return ans;
}

long long inv_mod(long long x, long long mod) {
	return fast_expo(x, mod-1, mod);
}

int n;
vector<long long> x, y;
long long product = 1;
long long mod = 1e9+7;

long long init(int N, long long X[], long long Y[]) {
	n = N;
	for (int i = 0; i < n; i++) {
		x.push_back(X[i]);
		product = (product * X[i]) % mod;
	}
	for (int i = 0; i < n; i++) {
		y.push_back(Y[i]);
	}
	long long picked_y = y[n-1];
	long long divisor = x[n-1];
	long long curr_y = y[n-1];
	long long curr_div = x[n-1];
	for (int i = n-2; i > 0; i--) {
		curr_div *= x[i];
		curr_y = y[i];
		if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
		if (curr_div >= 1e9) {
			break;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}

long long updateX(int pos, long long val) {
	product = (((product * val) % mod) * inv_mod(x[pos], mod))% mod;
	x[pos] = val;
	long long picked_y = y[n-1];
	long long divisor = x[n-1];
	long long curr_y = y[n-1];
	long long curr_div = x[n-1];
	for (int i = n-2; i > 0; i--) {
		curr_div *= x[i];
		curr_y = y[i];
		if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
		if (curr_div >= 1e9) {
			break;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}
long long updateY(int pos, long long val) {
	y[pos] = val;
	long long picked_y = y[n-1];
	long long divisor = x[n-1];
	long long curr_y = y[n-1];
	long long curr_div = x[n-1];
	for (int i = n-2; i > 0; i--) {
		curr_div *= x[i];
		curr_y = y[i];
		if ((curr_y * divisor) > (picked_y * curr_div)) {
			picked_y = curr_y;
			divisor = curr_div;
		}
		if (curr_div >= 1e9) {
			break;
		}
	}
	long long ans = ((product * picked_y) % mod * inv_mod(divisor, mod)) % mod;
	return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccA03QhV.o: in function `main':
grader.c:(.text.startup+0xb1): undefined reference to `init(int, int*, int*)'
/usr/bin/ld: grader.c:(.text.startup+0x10b): undefined reference to `updateX(int, int)'
/usr/bin/ld: grader.c:(.text.startup+0x165): undefined reference to `updateY(int, int)'
collect2: error: ld returned 1 exit status