Advertisement
a53

autostrada1

a53
May 5th, 2022
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define MAXN 2000
  4.  
  5. int dl[] = { -1, 0, 1, 0 }, dc[] = { 0, 1, 0, -1 };
  6.  
  7. short drum[2][1 + MAXN][1 + MAXN]; // 0 daca am drum catre sud, 1 catre est
  8. int cost[5];
  9.  
  10. int main() {
  11. FILE *fin, *fout;
  12. int n, i, l, c, lnou, cnou, lmin, cmin, k, d, p, dir, total;
  13.  
  14. fin = fopen( "autostrada.in", "r" );
  15. fscanf( fin, "%d%d%d%d", &n, &k, &l, &c );
  16. fscanf( fin, "%d%d%d", &cost[2], &cost[3], &cost[4] );
  17. cost[1] = cost[2]; // cumva costul e acelasi, desi e doar jumate :-)
  18.  
  19. // marcam segmentele de drum in matrice
  20. i = 0;
  21. while ( i < k && l > 0 && l <= n && c > 0 && c <= n ) {
  22. fscanf( fin, "%d%d", &dir, &p );
  23. lnou = l + dl[dir] * p;
  24. cnou = c + dc[dir] * p;
  25. if ( lnou > 0 && lnou <= n && cnou > 0 && cnou <= n ) {
  26. lmin = l < lnou ? l : lnou;
  27. cmin = c < cnou ? c : cnou;
  28. if ( drum[dir % 2][lmin][cmin] < p )
  29. drum[dir % 2][lmin][cmin] = p;
  30. }
  31. l = lnou;
  32. c = cnou;
  33. i++;
  34. }
  35. fclose( fin );
  36.  
  37. fout = fopen( "autostrada.out", "w" );
  38. if ( i < k )
  39. fprintf( fout, "TRASEU INVALID\n%d\n", i );
  40. else {
  41. // calculam drumurile verticale in matrice
  42. for ( c = 1; c <= n; c++ ) {
  43. d = 0;
  44. for ( l = 1; l <= n; l++ ) {
  45. if ( drum[0][l][c] > d )
  46. d = drum[0][l][c];
  47. if ( d > 0 ) {
  48. drum[0][l][c] = 1;
  49. d--;
  50. }
  51. }
  52. }
  53.  
  54. // calculam drumurile orizontale in matrice si insumam costul
  55. total = 0;
  56. for ( l = 1; l <= n; l++ ) {
  57. d = 0;
  58. for ( c = 1; c <= n; c++ ) {
  59. if ( drum[1][l][c] > d )
  60. d = drum[1][l][c];
  61. if ( d > 0 ) {
  62. drum[1][l][c] = 1;
  63. d--;
  64. }
  65. total += cost[drum[0][l - 1][c] + drum[1][l][c]
  66. + drum[0][l][c] + drum[1][l][c - 1]];
  67. }
  68. }
  69. fprintf( fout, "TRASEU VALID\n%d\n", total );
  70. }
  71. fclose( fout );
  72.  
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement