Cod sursa(job #2924002)

Utilizator adelina_15InfoAdelina Radoi adelina_15Info Data 22 septembrie 2022 20:03:34
Problema Partitie Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream fin("partitie.in");
ofstream fout("partitie.out");

struct p{
    int val;
    int ind;

};

vector<p> a;
vector<int> ind;
vector<int> grup;
vector<bool> fol;
//9 2 11 5 3
//3 0 4 2 1
//1 4 3 0 2
//2 3 5 9 11

bool cmp(const p &x, p &y)
{
    return x.val < y.val;
}

int main()
{
    int n, d;
    fin >> n >> d;
    bool gasit = true;
    int grupa = 0, j = 0;
    grup.resize(n);
    for(int i = 0; i < n; i++)
    {
        int x;
        fin >> x;
        a.push_back({x,i});
        fol.push_back(false);
        //ind.push_back(i);
    }

    sort(a.begin(), a.end(), cmp);
    ind.resize(n);
    for(int i = 0; i < n; i++)
    {
        ind[a[i].ind] = i;

    }

    while(gasit)
    {
        int ult = a[j].val;
        grupa++;
        grup[j] = grupa;
        fol[j] = 1;
        int j2 = -1;
        for(int i = j+1; i < n; i++)
        {
            if(!fol[i])
            {
                //int temp = a[j]+dt;
                if(a[i].val >= ult+d)
                {
                    //dt += a[i]-a[j];
                    ult = a[i].val;
                    grup[i] = grupa;
                    fol[i] = 1;
                }
                else if(j2 == -1)
                    j2 = i;
            }


        }
        j = j2;
        if(j == -1)
            gasit = false;
    }
    fout << grupa << "\n";
    for(int i = 0; i < n; i++)
        fout << grup[ind[i]] << "\n";
    return 0;
}