Pagini recente » Monitorul de evaluare | Cod sursa (job #1761873) | Cod sursa (job #2727979) | Cod sursa (job #2028543) | Cod sursa (job #1191091)
#include <cstdio>
#include <vector>
#include <utility>
int N, L, T;
std::vector<std::pair<int, int>> v;
void read_input() {
scanf("%d%d", &N, &L);
for(int i = 0; i < N; ++i) {
int A, B;
scanf("%d%d", &A, &B);
v.push_back(std::make_pair(A, B));
}
}
template<bool PRINT>
bool f(int a, int b, int p) {
if(p < 0) return a <= 0 && b <= 0;
int p_maxA = T / v[p].first;
for(int i = 0; i <= p_maxA; ++i) {
int lit_A = i;
int lit_B = (T - lit_A * v[p].first) / v[p].second;
if(f<PRINT>(a - lit_A, b - lit_B, p - 1)) {
if(PRINT) printf("%d %d\n", lit_A, lit_B);
return true;
}
}
return false;
}
int main(int argc, char *argv[]) {
freopen("lapte.in", "r", stdin);
freopen("lapte.out", "w", stdout);
read_input();
for(T = 1; T <= 100; ++T) {
if(f<false>(L, L, N - 1)) {
break;
}
}
printf("%d\n", T);
f<true>(L, L, N - 1);
return 0;
}