fork download
  1. program sushi;
  2. Uses Math;
  3. const MAXN=100002;
  4. type piatto = record
  5. inizio:longint;
  6. durata:longint;
  7. peso:longint;
  8. fine:int64;
  9. end;
  10. elenco = array[0.. MAXN-1] of int64;
  11. table = array[0..MAXN-1] of piatto;
  12. var N,i,j, id:Longint;
  13. ricordafine, quantomangio, ricordoquantomangiato:int64;
  14. T : table;
  15. S,W,D,E, ricordaindice, ricordaindice2:elenco; (*array riferiti ai piatti Start, Weigth, Durata, End*)
  16.  
  17. Procedure scambia (var a,b: int64);
  18. var x:int64;
  19. begin
  20. x:=a;
  21. a:=b;
  22. b:=x;
  23. end;
  24.  
  25. Procedure ordinamento (estremoi,estremos: int64; var v : elenco; var u:elenco; ordinato:boolean);
  26. var inf, sup, medio:int64;
  27. pivot :int64;
  28. begin
  29. inf:=estremoi;
  30. sup:=estremos;
  31. medio:= (estremoi+estremos) div 2;
  32. pivot:=v[medio];
  33. repeat
  34. if (ordinato) then
  35. begin
  36. while (v[inf]<pivot) do inf:=inf+1;
  37. while (v[sup]>pivot) do sup:=sup-1;
  38. end;
  39. if inf<=sup then
  40. begin
  41. scambia(v[inf],v[sup]);
  42. scambia(u[inf],u[sup]);
  43. inf:=inf+1;
  44. sup:=sup-1;
  45. end;
  46. until inf>sup;
  47. if (estremoi<sup) then ordinamento(estremoi,sup,v,u,ordinato);
  48. if (inf<estremos) then ordinamento(inf,estremos,v,u,ordinato);
  49. end;
  50. Procedure ricerca (var w:elenco; target:int64);
  51. var m,start,eend: qword;
  52.  
  53. begin
  54. start:=0; eend:=N-1 ;
  55. repeat
  56. m:=(start + eend) div 2;
  57. if w[m]<target then start:=m+1
  58. else if w[m]>=target then begin id:=m; eend:=m-1; end;
  59. until start>eend;
  60. if start>N-1 then id:=-1;
  61. end;
  62.  
  63. begin
  64. (*assign(input, 'input.txt'); reset(input);
  65.   assign(output, 'output.txt'); rewrite(output);*)
  66. readln(N);
  67. for i:=0 to N-1 do begin ricordaindice[i]:=i; ricordaindice2[i]:=i; end;
  68. for i:=0 to N-1 do
  69. begin
  70. { dish on table }
  71. readln(S[i],W[i],D[i]);
  72. E[i]:=S[i]+D[i];
  73. T[i].inizio:=S[i];
  74. T[i].durata:=D[i];
  75. T[i].peso:=W[i];
  76. T[i].fine:=E[i];
  77. end;
  78. ordinamento(0,N-1,E, ricordaindice,true);
  79. ordinamento(0,N-1,S, ricordaindice2,true);
  80. for i:=0 to N-1 do write(S[i],' ', ricordaindice2[i],' '); writeln;
  81. for i:=0 to N-1 do write(E[i],' ', ricordaindice[i],' '); writeln;
  82. ricordoquantomangiato:=0;
  83. for i:=0 to N-1 do
  84. begin
  85. writeln('indice i ',i,' ',E[i]);
  86. quantomangio:=T[ricordaindice[i]].peso;;
  87. ricordafine:=E[i];
  88. while ricordafine<=S[N-1] do
  89. begin
  90. ricerca(S, ricordafine);
  91. if ricordafine <=E[N-1] then begin
  92. writeln('ident ',id);
  93. writeln('indice trov ',ricordaindice2[id]);
  94. writeln('peso ',T[ricordaindice2[id]].peso);
  95.  
  96. quantomangio:=quantomangio+T[ricordaindice2[id]].peso;
  97. ricordafine:=ricordafine+T[ricordaindice2[id]].durata;
  98.  
  99.  
  100. writeln('ricordafine ',ricordafine);
  101.  
  102. writeln(' quantomangiato ',quantomangio); end;
  103. end;
  104. if quantomangio>ricordoquantomangiato then ricordoquantomangiato:=quantomangio;
  105. end;
  106. writeln(ricordoquantomangiato);
  107. end.
Success #stdin #stdout 0.01s 5312KB
stdin
4
6 24 3
8 16 5
17 4 1
11 11 2
stdout
6 0 8 1 11 3 17 2 
9 0 13 3 13 1 18 2 
indice i 0 9
ident  2
indice trov 3
peso 11
ricordafine  11
 quantomangiato 35
ident  2
indice trov 3
peso 11
ricordafine  13
 quantomangiato 46
ident  3
indice trov 2
peso 4
ricordafine  14
 quantomangiato 50
ident  3
indice trov 2
peso 4
ricordafine  15
 quantomangiato 54
ident  3
indice trov 2
peso 4
ricordafine  16
 quantomangiato 58
ident  3
indice trov 2
peso 4
ricordafine  17
 quantomangiato 62
ident  3
indice trov 2
peso 4
ricordafine  18
 quantomangiato 66
indice i 1 13
ident  3
indice trov 2
peso 4
ricordafine  14
 quantomangiato 15
ident  3
indice trov 2
peso 4
ricordafine  15
 quantomangiato 19
ident  3
indice trov 2
peso 4
ricordafine  16
 quantomangiato 23
ident  3
indice trov 2
peso 4
ricordafine  17
 quantomangiato 27
ident  3
indice trov 2
peso 4
ricordafine  18
 quantomangiato 31
indice i 2 13
ident  3
indice trov 2
peso 4
ricordafine  14
 quantomangiato 20
ident  3
indice trov 2
peso 4
ricordafine  15
 quantomangiato 24
ident  3
indice trov 2
peso 4
ricordafine  16
 quantomangiato 28
ident  3
indice trov 2
peso 4
ricordafine  17
 quantomangiato 32
ident  3
indice trov 2
peso 4
ricordafine  18
 quantomangiato 36
indice i 3 18
66