fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. // Định nghĩa cấu trúc cho một công việc
  7. struct Job {
  8. int profit; // Lợi nhuận của công việc
  9. int deadline; // Thời hạn của công việc
  10. };
  11.  
  12. // Hàm so sánh để sắp xếp các công việc theo thời gian thực hiện tăng dần
  13. bool compare(Job a, Job b) {
  14. return (a.profit < b.profit);
  15. }
  16.  
  17. // Hàm lập lịch ưu tiên đúng hạn
  18. void scheduleJobs(vector<Job>& jobs, int n) {
  19. // Bước 1: Sắp xếp các công việc theo thời gian thực hiện tăng dần
  20. sort(jobs.begin(), jobs.end(), compare);
  21.  
  22. // Mảng để lưu kết quả về thời gian bắt đầu, kết thúc và trạng thái của từng công việc
  23. vector<pair<int, pair<int, string>>> schedule;
  24.  
  25. // Bước 2: Tính thời gian thực tế hoàn thành mỗi công việc
  26. int current_time = 0;
  27. for (int i = 0; i < n; i++) {
  28. int start_time = current_time;
  29. int end_time = start_time + jobs[i].profit;
  30. string status = (end_time <= jobs[i].deadline) ? "Đúng hạn" : "Trễ hạn";
  31. schedule.push_back({jobs[i].profit, {start_time, status}});
  32. current_time = end_time;
  33. }
  34.  
  35. // Bước 3: In ra kết quả
  36. cout << "Công việc | Thời gian bắt đầu | Thời gian kết thúc (ci) | Thời hạn (di) | Trạng thái" << endl;
  37. cout << "---------------------------------------------------------------------------------------" << endl;
  38.  
  39. int on_time_count = 0;
  40. int late_count = 0;
  41. for (int i = 0; i < n; i++) {
  42. cout << "(" << jobs[i].profit << "; " << jobs[i].deadline << ")" << "\t\t"
  43. << schedule[i].second.first << "\t\t" << schedule[i].second.first + schedule[i].first << "\t\t\t"
  44. << jobs[i].deadline << "\t\t" << schedule[i].second.second << endl;
  45. if (schedule[i].second.second == "Đúng hạn")
  46. on_time_count++;
  47. else
  48. late_count++;
  49. }
  50.  
  51. // In ra kết quả cuối cùng
  52. cout << "\nKết quả cuối cùng: Có " << on_time_count << " công việc hoàn thành đúng hạn và " << late_count << " công việc hoàn thành trễ hạn." << endl;
  53. }
  54.  
  55. int main() {
  56. // Nhập số lượng công việc
  57. int n;
  58. cout << "Nhập số lượng công việc: ";
  59. cin >> n;
  60.  
  61. vector<Job> jobs(n);
  62.  
  63. cout << "Nhập thông tin cho từng công việc (profit, deadline):\n";
  64. for (int i = 0; i < n; i++) {
  65. cin >> jobs[i].profit >> jobs[i].deadline;
  66. }
  67.  
  68. scheduleJobs(jobs, n);
  69.  
  70. return 0;
  71. }
  72.  
Success #stdin #stdout 0.01s 5268KB
stdin
12
7 35
9 53
3 10
8 41
2 8
3 4
1 1
5 9
4 15
2 7
6 27
10 24
stdout
Nhập số lượng công việc: Nhập thông tin cho từng công việc (profit, deadline):
Công việc | Thời gian bắt đầu | Thời gian kết thúc (ci) | Thời hạn (di) | Trạng thái
---------------------------------------------------------------------------------------
(1; 1)		0		1			1		Đúng hạn
(2; 8)		1		3			8		Đúng hạn
(2; 7)		3		5			7		Đúng hạn
(3; 10)		5		8			10		Đúng hạn
(3; 4)		8		11			4		Trễ hạn
(4; 15)		11		15			15		Đúng hạn
(5; 9)		15		20			9		Trễ hạn
(6; 27)		20		26			27		Đúng hạn
(7; 35)		26		33			35		Đúng hạn
(8; 41)		33		41			41		Đúng hạn
(9; 53)		41		50			53		Đúng hạn
(10; 24)		50		60			24		Trễ hạn

Kết quả cuối cùng: Có 9 công việc hoàn thành đúng hạn và 3 công việc hoàn thành trễ hạn.