Advertisement
nicuvlad76

Untitled

Jan 14th, 2023
834
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <fstream>
  2. #define InFile  "afise.in"
  3. #define OutFile "afise.out"
  4. #define Max 1001
  5. using namespace std;
  6.  
  7. struct Afis
  8. {
  9.     int bed, alb;
  10. };
  11.  
  12. Afis S[Max];
  13. int L, N, K, M;
  14. int Viz[Max];
  15.  
  16. void Read()
  17. {
  18.   int x, bed, alb, i;
  19.   ifstream in(InFile);
  20.  
  21.   in>>L>>N>>K;
  22.  
  23.   for(i=1; i<=N; i++)
  24.     { in>>x; Viz[x]=1; }
  25.   // marcate zonele ce trebuie acoperite
  26.   in.close();
  27.  
  28.   i=1;
  29.   bed = alb = 0;
  30.   while(!Viz[i] && i<=L) i++;
  31.   while(i <= L)
  32.    { while(Viz[i] && i<=L)  { bed++; i++; }
  33.      while(!Viz[i] && i<=L) { alb++; i++; }
  34.      // determin lungimea zonelor rele urmate de zone ok
  35.      M++;
  36.      S[M].bed = bed;
  37.      S[M].alb = alb;
  38.      bed = alb = 0;
  39.    }
  40.    M--;
  41. }
  42.  
  43. // ordonare crescatoare dupa zonele ok
  44.  
  45. int poz(int p, int u)
  46. {
  47.   int st, dr;
  48.   st = p; dr=u;
  49.   Afis aux=S[p];
  50.   while(st < dr)
  51.     { while(st<dr && aux.alb <= S[dr].alb) dr--;
  52.       S[st]=S[dr];
  53.       while(st<dr && aux.alb >= S[st].alb) st++;
  54.       S[dr]=S[st];
  55.     }
  56.   S[st]=aux;
  57.   return st;
  58. }
  59.  
  60. void Quik(int p, int u)
  61. {
  62.   int m=poz(p,u);
  63.   if(p<m) Quik(p,m-1);
  64.   if(m<u) Quik(m+1,u);
  65. }
  66.  
  67. void Write()
  68. {
  69.   int i, nK, St;
  70.   ofstream out(OutFile);
  71.   St=nK=0;
  72.   M++;
  73.   for(i=1; i<=M; i++) St+=S[i].bed;
  74.   //zone care obligatoriu trebuie acoperite
  75.  
  76.   nK = M;
  77.   if(M>K) { i = 1;
  78.         while(nK>K && i<=M)
  79.           { St += S[i].alb; i++; nK--; }
  80.         // folosesc spatiile albe pentru a reduce numarul de panouri
  81.       }
  82.   out<<St<<" "<<nK<<"\n";
  83.   out.close();
  84. }
  85.  
  86. int main()
  87. {
  88.   Read();
  89.   Quik(1, M);
  90.   Write();
  91.  
  92.   return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement