#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>

using namespace std;

struct jarmu
{
    int o, p, mp, t;        // óra, perc, másodperc és áthaladási idő
    char v;                 // város, AHONNAN jön
};

void F1(vector<jarmu> &f)
{
    cout << "1. feladat - adatok beolvasása..." << endl;
    ifstream fbe;
    string jarmuvek_szama;
    fbe.open("forgalom.txt");
    getline(fbe,jarmuvek_szama);
    jarmu temp;
    while(fbe>>temp.o&&fbe>>temp.p&&fbe>>temp.mp&&fbe>>temp.t&&fbe>>temp.v)
    {
        f.push_back(temp);
    }
    fbe.close();
    /*
    for(auto elem:f)
    {
        cout << elem.o << " " << elem.p << " " << elem.mp << " " << elem.t << " " << elem.v << endl;
    }
    */
    cout << "----------------------------------------------------------------------------------" << endl;
}

void F2(vector<jarmu> f)
{
    cout << "2. feladat" << endl;
    int n;
    cout << "Kérem egy jármű sorszámát: ";
    cin >> n;
    char v = f[n-1].v=='A'? 'F': 'A';
    printf("A(z) %d. jármű %c város felé haladt.\n",n,v);
    cout << "----------------------------------------------------------------------------------" << endl;
}

int atvalt(vector<jarmu> u, int index)
{
    return u[index].o*3600+u[index].p*60+u[index].mp;
}

void F3(vector<jarmu> f)
{

    cout << "3. feladat" << endl;
    vector<jarmu> utolsok;
    int i=f.size()-1, n=0;
    while(n<2)
    {
        if(f[i].v=='A')
        {
            n++;
            utolsok.push_back(f[i]);
        }
        i--;
    }
    if(n==2)
    {
        cout << "A két utolsó F-be tartó különbsége: " << atvalt(utolsok,0)+utolsok[0].t-(atvalt(utolsok,1)+utolsok[1].t) << endl;
    }
    else
    {
        cout << "Sajnos nincs két F-be tartó jármű!" << endl;
    }
    cout << "----------------------------------------------------------------------------------" << endl;
}

void F4(vector<jarmu> f)
{
    cout << "4. feladat" << endl;

    vector<vector<int>> matrix(24, vector<int>(2));

    for(auto elem:f)
    {
        if(elem.v=='A') matrix[elem.o-1][0]++;
        else matrix[elem.o-1][1]++;
    }

    for(int i=0;i<24;i++)
    {
        if(matrix[i][0]+matrix[i][1]>0)
        {
            cout << i+1 << " ";
            for(int j=0;j<2;j++)
                if(matrix[i][j]!=0) cout << matrix[i][j] << " ";
            cout << endl;
        }
    }
    cout << "----------------------------------------------------------------------------------" << endl;
}

bool t_szerint(const jarmu &a, const jarmu &b)
{
    return a.t < b.t; // itt adjuk meg a rendezési szempontot
}
void F5(vector<jarmu> f)
{
    cout << "5. feladat" << endl;
    vector<jarmu> temp;
    temp=f;
    sort(temp.begin(),temp.end(),t_szerint);

    cout << fixed;
    for(int i=0;i<10;i++)
    {
        cout << temp[i].o << " " << temp[i].p << " " << temp[i].mp << " " << temp[i].v << " " << setprecision(1) << (float) 1000/temp[i].t << " " << endl;
    }

    cout << "----------------------------------------------------------------------------------" << endl;
}

void F6(vector<jarmu> f)
{
    cout << "6. feladat" << endl;
    ofstream fki;
    fki.open("alsoC++.txt");
    int kilep, elozo=0;
    for(int i=0;i<f.size();i++)
    {
        if(f[i].v=='F')
        {
            kilep=max(elozo,atvalt(f,i)+f[i].t);
            fki << kilep/3600 << " " << kilep%3600/60 << " " << kilep%3600%60 << endl;
            elozo=kilep;
        }
    }
    fki.close();
}

int main()
{
    setlocale(LC_ALL,"");
    vector<jarmu> forgalom;
    F1(forgalom);
    F2(forgalom);
    F3(forgalom);
    F4(forgalom);
    F5(forgalom);
    F6(forgalom);
    return 0;
}

