Advertisement
a53

Afise

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