Advertisement
imarosi

forma1

Nov 4th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #if 0
  5. #define log(...) printf(__VA_ARGS__)
  6. #else
  7. #define log(...) /* nothing */
  8. #endif
  9.  
  10. struct gumi {
  11.     double  uj_korido;
  12.     int     kopas_kezdete;
  13.     double  kopas_merteke;
  14.     int     elhasznalodas_kezdete;
  15.     double  elhasznalodas_merteke;
  16. } gumik[3];
  17.  
  18. FILE *input;
  19. FILE *output;
  20.  
  21. int     korok_szama;
  22. double  boxkiallas_ido;
  23.  
  24. int     most_gumi;
  25.  
  26. int     kov_kiallas;    // ennek a kornek a vegen van a kovetkezo kiallas
  27. int     kov_gumi;       // es ilyen gumira valtunk
  28.  
  29. void beolvas_adatok()
  30. {
  31.     for (int k=0; k<3; k++) {
  32.         char keverek[2];
  33.         struct gumi g;
  34.         fscanf(input, " %s %lf %d %lf %d %lf\n",
  35.               keverek, &g.uj_korido,
  36.               &g.kopas_kezdete, &g.kopas_merteke,
  37.               &g.elhasznalodas_kezdete, &g.elhasznalodas_merteke
  38.              );
  39.         gumik[keverek[0]-'A'] = g;
  40.         log("%s korido=%f kopas=%d %f elhasz=%d %f\n", keverek, g.uj_korido, g.kopas_kezdete, g.kopas_merteke, g.elhasznalodas_kezdete, g.elhasznalodas_merteke);
  41.     }
  42.     fscanf(input, " %d\n", &korok_szama);
  43.     log("%d kor\n", korok_szama);
  44.     fscanf(input, " %lf\n", &boxkiallas_ido);
  45.     log("%f boxkiallas\n", boxkiallas_ido);
  46. }
  47.  
  48. void beolvas_strat()    // beolvassuk a kovetkezo strategiai lepest: mikor allunk ki milyen keverekert
  49. {
  50.     char keverek[2];
  51.  
  52.     if (fscanf(input, " %d%s", &kov_kiallas, keverek) < 2) {
  53.         // nincs tobb kiallas a strategiaban
  54.         log("strategia: vegigmegy\n");
  55.         kov_kiallas = korok_szama + 1;  // nem lesz mar olyan
  56.     } else {
  57.         log("strategia: %d. korben %s gumi\n", kov_kiallas, keverek);
  58.         kov_gumi = keverek[0]-'A';
  59.     }
  60. }
  61.  
  62. int beolvas_indulas()
  63. {
  64.     beolvas_strat();
  65.     if (kov_kiallas != 0)
  66.         return 0;
  67.     most_gumi = kov_gumi;
  68. }
  69.  
  70. double egy_kor_ideje(int kor)
  71. {
  72.     // eddig "kor" kort tett meg a mostani gumi. Mennyi idobe kerult?
  73.     // megjegyzesben: egy "60.0  3  1.0  5  1.0" tulajdonsagu keverek a 9. 10. 11. korben
  74.     double ido = gumik[most_gumi].uj_korido;                // 60.0
  75.     if (kor > gumik[most_gumi].kopas_kezdete) {                     // 9>3,  10>3, 11>3
  76.         int kopottkor = kor - gumik[most_gumi].kopas_kezdete;       //   6,    7,    8
  77.         ido += gumik[most_gumi].kopas_merteke * kopottkor;          // +1*6, +1*7, +1*8
  78.                                                                     // = 66,  67,  68
  79.         if (kopottkor > gumik[most_gumi].elhasznalodas_kezdete) {               // 6>5, 7>5, 8>5
  80.             int elhaszkor = kopottkor - gumik[most_gumi].elhasznalodas_kezdete; //  1,   2,   3
  81.             while (elhaszkor) {
  82.                 ido += gumik[most_gumi].elhasznalodas_merteke * elhaszkor;      // +1, +2+1, +3+2+1
  83.                                                                                 // 67,  70,  74
  84.                 elhaszkor--;
  85.             }
  86.         }
  87.     }
  88.     return ido;
  89. }
  90.  
  91. int main(int argc, char **argv)
  92. {
  93.     int kiallasok = 0;
  94.     int ket_keverek = 0;
  95.     double ossz_ido = 0.0;
  96.  
  97.     if (argc >= 2)
  98.         input = fopen(argv[1], "r");
  99.     else
  100.         input = fopen("be.txt", "r");
  101.  
  102.     if (argc >= 3)
  103.         output = fopen(argv[2], "w");
  104.     else
  105.         output = fopen("ki.txt", "w");
  106.  
  107.     beolvas_adatok();
  108.     if (beolvas_indulas()) {    // milyen gumival indulunk?
  109.         beolvas_strat();        // mi lesz az elso kiallas majd?
  110.         int kor;
  111.         int gumikor = 0;        // ennek a kornek a vege ota fogy a gumi
  112.         for (kor = 1; kor <= korok_szama; kor++) {
  113.             double korido = egy_kor_ideje(kor - gumikor);
  114.             if (kor == kov_kiallas) {
  115.                 // a kor vegen vagyunk, kiallunk gumicserere
  116.                 kiallasok++;
  117.                 korido += boxkiallas_ido;
  118.                 if (most_gumi != kov_gumi)
  119.                     ket_keverek = 1;    // van ket keverek, rendben
  120.                 most_gumi = kov_gumi;   // uj gumit raktunk fel
  121.                 gumikor = kor;          // ennek a kornek a vegen indul az uj gumi kopasa
  122.                 // mikor lesz majd a kovetkezo kiallas?
  123.                 beolvas_strat();
  124.             }
  125.             ossz_ido += korido;
  126.             log("%d. kor: %f mp\n", kor, korido);
  127.         }
  128.     }
  129.  
  130.     if (kiallasok < 1 || ket_keverek == 0)
  131.         fprintf(output, "HIBA\n");
  132.     else
  133.         fprintf(output, "%.3f\n", ossz_ido);
  134.  
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement