Viết chương trình C++.Có n người xếp thành hàng để mua vé. Thời gian bán vé cho người thứ i là ti . Nhân viên bán vé mỗi lần chỉ bán vé cho một người, người này mua vé xong mới đến lượt người kế tiếp. Trong xấp vé mà nhân viên đang bán có một vé cặp (gồm 2 vé) và vé cặp này phải bán cho một người với thời gian bán vẫn không thay đổi, tức là nếu người thứ i mua một vé với thời gian ti thì khi mua vé cặp này vẫn tốn thời gian là ti. Vì mỗi người chỉ có nhu cầu mua một vé nên khi một người nào đó mua vé cặp này thì anh ta sẽ nhượng lại một vé cho người đứng phía sau mình, và người được nhượng vé này sẽ rời khỏi hàng cùng với người phía trước mà không phải chờ mua vé nữa. Yêu cầu: Hãy cho biết nhân viên bán vé phải bán chiếc vé cặp cho người nào để tổng thời gian bán vé là ít nhất. Dữ liệu vào: Cho từ tệp văn bản TICKET.INP gồm hai dòng: • Dòng thứ nhất ghi số nguyên dương n (2
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
struct Person {
int index; // Vị trí của người trong hàng
int time; // Thời gian mua vé của người
};
bool compareByTime(const Person& a, const Person& b) {
return a.time < b.time;
}
int main() {
// Đọc dữ liệu từ tệp TICKET.INP
std::ifstream inputFile("TICKET.INP");
if (!inputFile.is_open()) {
std::cerr << "Khong the mo tep TICKET.INP" << std::endl;
return 1;
}
int n;
inputFile >> n;
std::vector<Person> people;
for (int i = 1; i <= n; ++i) {
Person person;
person.index = i;
inputFile >> person.time;
people.push_back(person);
}
// Đóng tệp TICKET.INP
inputFile.close();
// Sắp xếp danh sách người theo thời gian mua vé tăng dần
std::sort(people.begin(), people.end(), compareByTime);
// Tìm người mua vé cặp để tổng thời gian bán vé là ít nhất
int totalTime = 0;
int minTotalTime = INT_MAX;
int bestPairIndex = -1;
for (int i = 0; i < n - 1; ++i) {
totalTime += people[i].time;
if (totalTime + people[i + 1].time < minTotalTime) {
minTotalTime = totalTime + people[i + 1].time;
bestPairIndex = i;
}
}
// Ghi kết quả ra màn hình
std::cout << "Nguyen vien ban ve can ban ve cap cho nguoi thu: " << people[bestPairIndex + 1].index << std::endl;
return 0;
}