Hướng dẫn giải của [Free Contest 06] PROBLEM
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Có n người, trong đó a người biết cách giải quyết vấn đề và b người từ chối tham gia. Cần tìm số người tối thiểu và tối đa sẽ bắt tay vào giải quyết vấn đề.
Cách làm
Gọi x là số người vừa biết cách giải vừa từ chối. Số người biết cách giải và không từ chối là a - x, và x có thể nằm trong khoảng từ max(0, a+b-n) đến min(a, b). Khi x lớn nhất thì số người tham gia ít nhất là max(0, a-b). Khi x nhỏ nhất thì số người tham gia nhiều nhất là min(a, n-b). Chương trình đọc t test và in hai số này cho mỗi test. Bài này đọc và ghi qua file problem.in và problem.out nên dùng freopen với đúng tên file.
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("problem.in", "r", stdin);
freopen("problem.out", "w", stdout);
int t;
cin >> t;
// Xử lý từng test
for (int i = 0; i < t; i++) {
int n, a, b;
cin >> n >> a >> b;
// Số người biết cách giải và không từ chối: ít nhất là max(0, a - b)
int toithieu = a - b;
if (toithieu < 0) {
toithieu = 0;
}
// Số người biết cách giải và không từ chối nhiều nhất là min(a, n - b)
int toida = min(a, n - b);
cout << toithieu << " " << toida << "\n";
}
return 0;
}
Bình luận