Skip to Content

Milk Pails

Análisis oficial (Java) 

Explicación

Como las restricciones son pequeñas, podemos usar fuerza bruta para revisar todas las combinaciones posibles, probando cada cantidad posible de vuelcos de XX y, para cada una, cada cantidad posible de vuelcos de YY. De este modo también podemos llevar el registro de la cantidad máxima de leche que se puede agregar al balde.

Implementación

Complejidad temporal: O(M2)\mathcal{O}(M^2)

#include <algorithm> #include <cstdio> #include <iostream> using namespace std; int main() { freopen("pails.in", "r", stdin); int buck1, buck2; int order; cin >> buck1 >> buck2 >> order; int closest = 0; // Try all possible combinations of the first & second bucket. for (int first = 0; first <= order; first++) { if (buck1 * first > order) { break; } for (int second = 0; second <= order; second++) { int n = (buck1 * first) + (buck2 * second); if (n > order) { break; } closest = max(closest, n); } } freopen("pails.out", "w", stdout); cout << closest << endl; }
import java.io.*; import java.util.*; public class Pails { public static void main(String[] args) throws IOException { BufferedReader read = new BufferedReader(new FileReader("pails.in")); StringTokenizer input = new StringTokenizer(read.readLine()); read.close(); int buck1 = Integer.parseInt(input.nextToken()); int buck2 = Integer.parseInt(input.nextToken()); int order = Integer.parseInt(input.nextToken()); int closest = 0; // Try all possible combinations of the first & second bucket. for (int first = 0; first <= order; first++) { if (buck1 * first > order) { break; } for (int second = 0; second <= order; second++) { int n = (buck1 * first) + (buck2 * second); if (n > order) { break; } closest = Math.max(closest, n); } } PrintWriter written = new PrintWriter("pails.out"); written.println(closest); written.close(); } }
with open("pails.in") as fin: buck1, buck2, order = map(int, fin.readline().split()) closest = 0 # Try all possible combinations of the first & second bucket. for first in range(order + 1): if buck1 * first > order: break for second in range(order + 1): current = (buck1 * first) + (buck2 * second) if current > order: break closest = max(closest, current) print(closest, file=open("pails.out", "w"))