#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <cmath>  //math.h
#include <ctime>
#include <string>

using namespace std;

struct honap
{
    string hn;  //hónap neve
    int nap;    //hónap napjainak száma
    int ksz;    //hónap kezdősorszáma
} ho[12];  //12 hónap tömbje, minden eleme 3 mezőből áll

struct foglalas
{
    int s, sz, e, t, v, r;
    string az;
} fogl[1000];

int N;

void F1()
{
    ifstream be;
    be.open("pitypang.txt");

    be >> N;

    for(int i=0;i<N;i++)
    {
        be >> fogl[i].s;
        be >> fogl[i].sz;
        be >> fogl[i].e;
        be >> fogl[i].t;
        be >> fogl[i].v;
        be >> fogl[i].r;
        be >> fogl[i].az;
    }
    be.close();
}

void F1_2()
{
    ifstream be;
    be.open("honapok.txt");
    for(int i=0;i<12;i++)
    {
        be >> ho[i].hn;
        be >> ho[i].nap;
        be >> ho[i].ksz;
        cout << ho[i].hn << " " << ho[i].nap << ho[i].ksz << endl;
    }
    be.close();
}

void F2()
{
    int max=0;
    int maxth=fogl[max].t-fogl[max].e;

    for(int i=1;i<N;i++)
    {
        if(fogl[i].t-fogl[i].e>maxth)
        {
            max=i;
            maxth=fogl[i].t-fogl[i].e;
        }
    }
    cout << fogl[max].az << " (" << fogl[max].e << ") - " << maxth << endl;
}

void F3()
{
    int bev=0;
    int fiz;

    ofstream ki;
    ki.open("bevetel.txt");

    for(int i=0;i<N;i++)
    {
        if(fogl[i].e<121) fiz=9000;
        if(fogl[i].e>=121&&fogl[i].e<244) fiz=10000;
        if(fogl[i].e>=244) fiz=8000;

        //pótágy 2000/éj
        if(fogl[i].v>2) fiz=fiz+(fogl[i].t-fogl[i].e)*2000;

        //reggeli 1100/fő/nap
        if(fogl[i].r==1) fiz=fiz+fogl[i].v*(fogl[i].t-fogl[i].e)*1100;

        ki << fogl[i].s << ":" << fiz << endl;

        bev=bev+fiz;
        fiz=0;
    }
    ki.close();

    cout << "Összbevétel: " << bev << endl;
}

int hol_van(int x)
{
    int honap=0;
    for(int i=0;i<12;i++)
    {
        if(i<11)
        {
            if(x>=ho[i].ksz&&x<ho[i+1].ksz) honap=i;  //Január-november
        }
        else
        {
            if(x>=ho[i].ksz) honap=i;
        }
    }
    return honap;
}

void F4()
{
    int vej[12];
    for(int i=0;i<12;i++) vej[i]=0;

    int erk_honap;
    int tav_honap;

    for(int i=0;i<N;i++)
    {
        erk_honap=hol_van(fogl[i].e);
        tav_honap=hol_van(fogl[i].t);

        if(erk_honap==tav_honap)
        {
            vej[erk_honap]+=(fogl[i].t-fogl[i].e)*fogl[i].v;
        }
        else
        {
            vej[erk_honap]+=(ho[tav_honap].ksz-fogl[i].e)*fogl[i].v;
            vej[tav_honap]+=(fogl[i].t-ho[tav_honap].ksz)*fogl[i].v;
        }
        // cout << "vej: " << vej[erk_honap] << " " << vej[tav_honap] << endl;
    }

    for(int i=0;i<12;i++)
    {
        cout << i+1 << ": " << vej[i] << " vendégéj" << endl;
    }
}

void F5()
{
    char szabad[27][365];
    for(int i=0;i<27;i++)
    {
        for(int j=0;j<365;j++)
        {
            szabad[i][j]=true;
        }
    }

    int x,y,z;  //x - szoba (sor), y - érkezés napja (oszlopok)  z - távozás napja
    for(int i=0;i<N;i++)
    {
        x=fogl[i].sz-1;  //-1 mert indexek elcsusznak
        y=fogl[i].e-1;
        z=fogl[i].t-1;
        //foglalások alapján false-ra állítjuk a foglalt napokat az egyes szobákban
        for(int j=y;j<z;j++)
        {
            szabad[x][j]=false;
        }
    }
    //adatok bekérése a felhasználótól: mikor jön és hány éjszakára
    int enap, ejsz;
    cout << "Új foglalás" << endl;
    cout << "Érkezési nap sorszáma: ";
    cin >> enap;
    cout << "Eltöltendő éjszakák száma:";
    cin >> ejsz;
    //ejsz hosszú TRUE értékű sorozat keresése a SZABAD mátrixban
    bool van=false;
    int j,db;
    //szobánként haladunk
    for(int i=0;i<27;i++)
    {
        j=enap-1; db=0;   //számoljuk az egymást követő szabad napokat egy-egy szobánál ejsz hosszú "szakaszon"
        while(j<enap+ejsz-1)
        {
            if(szabad[i][j]) db++;
            j++;
        }
        if(db==ejsz)
        {
            van=true;
            cout << i+1 << ". szoba" << endl;
            break;  //Nem elegáns, de ha volt ilyen szabad sorozat, akkor fejezzük be!
        }
    }
    if(!van) cout << "Nincs szabad szoba ebben az időszakban!" << endl;
}
int main()
{
    setlocale(LC_ALL, "hun");
    cout << "1. feladat" << endl;
    F1();
    F1_2();
    cout << "2. feladat" << endl;
    F2();
    cout << "3. feladat" << endl;
    F3();
    cout << "4. feladat" << endl;
    F4();
    cout << "5. feladat" << endl;
    F5();
    return 0;
}
