Submit solution
Points:
0.70 (partial)
Time limit:
1.0s
Memory limit:
512M
Problem type
Allowed languages
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch
In case the statement didn't load correctly, you can download the statement here: Statement
Lưu ý: các bạn không nhập, xuất dữ liệu bằng file kể cả khi đề bài có yêu cầu. Đọc, ghi dữ liệu được thực hiện ở stdin và stdout.
Comments
include <iostream>
include <algorithm>
using namespace std;
int main() { long long a, b, c; cin >> a >> b >> c;
}
Để giải bài toán này, ta cần tìm cách chọn số sinh viên đi thực tập sao cho số đội có thể lập được là tối đa. Mỗi đội phải có một nam và hai nữ, và do đó, số đội có thể lập được sẽ bị giới hạn bởi cả số nam và số nữ.
Phân tích bài toán Yêu cầu của bài toán:
Để lập một đội, ta cần 1 nam và 2 nữ. Cần chọn 𝑐 c sinh viên đi thực tập (có thể là nam hoặc nữ) sao cho số đội có thể lập được là tối đa. Bài toán sau khi trừ số sinh viên đi thực tập:
Sau khi chọn 𝑐 c sinh viên đi thực tập từ tổng số sinh viên 𝑎 + 𝑏 a+b, số sinh viên nữ còn lại là 𝑎 − 𝑥 a−x và số sinh viên nam còn lại là 𝑏 − 𝑦 b−y, trong đó 𝑥 +
𝑦
𝑐 x+y=c. Để lập thành đội, cần có: s o ˆ ˊ
đội
min ( 𝑎 ′ 2 , 𝑏 ′ ) s o ˆ
ˊ đội=min( 2 a ′
,b ′ ), trong đó 𝑎 ′ a ′ và 𝑏 ′ b ′ là số nữ và nam còn lại sau khi trừ số người đi thực tập. Tối ưu hóa số đội:
Nếu gọi số đội tối đa có thể thành lập là teams, ta có: teams ≤ min ( 𝑎 2 , 𝑏 ) teams≤min( 2 a ,b). Tổng số sinh viên sau khi chọn đi thực tập phải thỏa mãn điều kiện đủ để lập đội là 3 ⋅ teams ≤ 𝑎 + 𝑏 − 𝑐 3⋅teams≤a+b−c. Công thức tính số đội tối đa:
Với
teams
min ( 𝑎 + 𝑏 − 𝑐 3 , 𝑎 2 , 𝑏 ) teams=min( 3 a+b−c , 2 a ,b). Thuật toán Tính số đội tối đa có thể lập là teams = min((a + b - c) / 3, a / 2, b). Kết quả của teams là số đội lớn nhất có thể lập.