Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. struct node{
  6. int number;
  7. int data;
  8. int start_time;
  9. int finish_time;
  10. };
  11.  
  12. bool compareData( node a, node b ) {return a.data < b.data;}
  13. void ActivitySelection(int n , int s[] , int f[]);
  14.  
  15. int main(){
  16. int n = 11;
  17. int s[n] = {1,3,0,5,3,5,6,8,8,9,12};
  18. int f[n] = {4,5,6,7,8,9,10,11,12,13,14};
  19. ActivitySelection(n,s,f);
  20.  
  21. system("pause");
  22. return 0;
  23. }
  24.  
  25. void ActivitySelection(int n , int s[] , int f[]){
  26. node array[n];
  27. int print[n] = {0};
  28. for(int i = 0 ; i < n ; i++){
  29. node temp;
  30. temp.number = i+1;
  31. temp.data = f[i] - s[i];
  32. temp.start_time = s[i];
  33. temp.finish_time = f[i];
  34. array[i] = temp;
  35. }
  36. sort(array, array + n, compareData);
  37.  
  38. int duration = *max_element(f,f+n) - *min_element(s,s+n);
  39. bool ocupied[duration];
  40. for(int i = 0 ; i < n ; i++){
  41. ocupied[i] = false;
  42. }
  43.  
  44. int count = 0;
  45. while(count < n){
  46. node temp_node = array[count];
  47. bool flag = true ;
  48. int change = 0;
  49. for(int i = temp_node.start_time+1 ; i <= temp_node.finish_time ; i++){
  50. if(ocupied[i] == true && flag == true){
  51. flag = false;
  52. change++;
  53. }
  54. else if(ocupied[i] == false && flag == false){
  55. flag == true;
  56. change++;
  57. }
  58. }
  59. if(flag == true && change == 0){
  60. print[count] = array[count].number;
  61. for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
  62. ocupied[k] = true;
  63. }
  64. }
  65. if(flag == true && change == 2){
  66. int f=0 , temp_s , temp_f , num;
  67. for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
  68. if(ocupied[k] = true && f == 0){
  69. temp_s = k;
  70. f++;
  71. }
  72. else if(ocupied[k] = false && f > 0){
  73. temp_f = k-1;
  74. }
  75. }
  76. for(int owow = 0 ; owow < n ; owow++){
  77. node owow_node = array[owow];
  78. if(owow_node.start_time == temp_s && temp_node.finish_time == temp_f){
  79. num = owow_node.number;
  80. break;
  81. }
  82. }
  83. for(int ohwow = 0 ; ohwow < n ; ohwow++){
  84. if(print[ohwow] == num){
  85. print[ohwow] == array[count].number;
  86. for(int k = temp_node.start_time ; k <= temp_node.finish_time ; k++){
  87. ocupied[k] = true;
  88. }
  89. }
  90. }
  91. }
  92. count++;
  93. }
  94.  
  95. count = 0;
  96. for(int i = 0 ; i < n ; i++){
  97. if(print[i] != 0){
  98. count++;
  99. }
  100. }
  101. cout << count << "\n" << "(";
  102. sort(print,print+n);
  103. for ( int i = 0 ; i < n ; i ++ ) {
  104. if ( print[i] != 0 ){
  105. cout << print[i];
  106. cout << ",";
  107. }
  108. }
  109. cout << ")" << endl;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement