Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #if 0
- #define log(...) printf(__VA_ARGS__)
- #else
- #define log(...) /* nothing */
- #endif
- struct gumi {
- double uj_korido;
- int kopas_kezdete;
- double kopas_merteke;
- int elhasznalodas_kezdete;
- double elhasznalodas_merteke;
- } gumik[3];
- FILE *input;
- FILE *output;
- int korok_szama;
- double boxkiallas_ido;
- int most_gumi;
- int kov_kiallas; // ennek a kornek a vegen van a kovetkezo kiallas
- int kov_gumi; // es ilyen gumira valtunk
- void beolvas_adatok()
- {
- for (int k=0; k<3; k++) {
- char keverek[2];
- struct gumi g;
- fscanf(input, " %s %lf %d %lf %d %lf\n",
- keverek, &g.uj_korido,
- &g.kopas_kezdete, &g.kopas_merteke,
- &g.elhasznalodas_kezdete, &g.elhasznalodas_merteke
- );
- gumik[keverek[0]-'A'] = g;
- 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);
- }
- fscanf(input, " %d\n", &korok_szama);
- log("%d kor\n", korok_szama);
- fscanf(input, " %lf\n", &boxkiallas_ido);
- log("%f boxkiallas\n", boxkiallas_ido);
- }
- void beolvas_strat() // beolvassuk a kovetkezo strategiai lepest: mikor allunk ki milyen keverekert
- {
- char keverek[2];
- if (fscanf(input, " %d%s", &kov_kiallas, keverek) < 2) {
- // nincs tobb kiallas a strategiaban
- log("strategia: vegigmegy\n");
- kov_kiallas = korok_szama + 1; // nem lesz mar olyan
- } else {
- log("strategia: %d. korben %s gumi\n", kov_kiallas, keverek);
- kov_gumi = keverek[0]-'A';
- }
- }
- int beolvas_indulas()
- {
- beolvas_strat();
- if (kov_kiallas != 0)
- return 0;
- most_gumi = kov_gumi;
- }
- double egy_kor_ideje(int kor)
- {
- // eddig "kor" kort tett meg a mostani gumi. Mennyi idobe kerult?
- // megjegyzesben: egy "60.0 3 1.0 5 1.0" tulajdonsagu keverek a 9. 10. 11. korben
- double ido = gumik[most_gumi].uj_korido; // 60.0
- if (kor > gumik[most_gumi].kopas_kezdete) { // 9>3, 10>3, 11>3
- int kopottkor = kor - gumik[most_gumi].kopas_kezdete; // 6, 7, 8
- ido += gumik[most_gumi].kopas_merteke * kopottkor; // +1*6, +1*7, +1*8
- // = 66, 67, 68
- if (kopottkor > gumik[most_gumi].elhasznalodas_kezdete) { // 6>5, 7>5, 8>5
- int elhaszkor = kopottkor - gumik[most_gumi].elhasznalodas_kezdete; // 1, 2, 3
- while (elhaszkor) {
- ido += gumik[most_gumi].elhasznalodas_merteke * elhaszkor; // +1, +2+1, +3+2+1
- // 67, 70, 74
- elhaszkor--;
- }
- }
- }
- return ido;
- }
- int main(int argc, char **argv)
- {
- int kiallasok = 0;
- int ket_keverek = 0;
- double ossz_ido = 0.0;
- if (argc >= 2)
- input = fopen(argv[1], "r");
- else
- input = fopen("be.txt", "r");
- if (argc >= 3)
- output = fopen(argv[2], "w");
- else
- output = fopen("ki.txt", "w");
- beolvas_adatok();
- if (beolvas_indulas()) { // milyen gumival indulunk?
- beolvas_strat(); // mi lesz az elso kiallas majd?
- int kor;
- int gumikor = 0; // ennek a kornek a vege ota fogy a gumi
- for (kor = 1; kor <= korok_szama; kor++) {
- double korido = egy_kor_ideje(kor - gumikor);
- if (kor == kov_kiallas) {
- // a kor vegen vagyunk, kiallunk gumicserere
- kiallasok++;
- korido += boxkiallas_ido;
- if (most_gumi != kov_gumi)
- ket_keverek = 1; // van ket keverek, rendben
- most_gumi = kov_gumi; // uj gumit raktunk fel
- gumikor = kor; // ennek a kornek a vegen indul az uj gumi kopasa
- // mikor lesz majd a kovetkezo kiallas?
- beolvas_strat();
- }
- ossz_ido += korido;
- log("%d. kor: %f mp\n", kor, korido);
- }
- }
- if (kiallasok < 1 || ket_keverek == 0)
- fprintf(output, "HIBA\n");
- else
- fprintf(output, "%.3f\n", ossz_ido);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement