#include unsigned long long int bin_search(int A, int B, unsigned long long int K, unsigned long long int M, unsigned long long X){ unsigned long long left = 0, right = (2 * X) / (A + B) + 1; unsigned long long int tree_amount1, tree_amount2; unsigned long long int mid; while(left + 1 < right){ mid = (left + right) / 2; tree_amount1 = A * (K - 1) * (mid / K) + A * (mid % K); tree_amount2 = B * (M - 1) * (mid / M) + B * (mid % M); if (tree_amount1 + tree_amount2 >= X) right = mid; else left = mid; } return right; } int main (){ FILE *inFile = fopen("forest.in", "r"); FILE *outFile = fopen("forest.out", "w"); int A, B; unsigned long long K, M, X; fscanf(inFile, "%d%llu%d%llu%llu", &A, &K, &B, &M, &X); fprintf(outFile, "%llu", bin_search(A, B, K, M, X)); fclose(inFile); fclose(outFile); return 0; }