Submission #1278155

#TimeUsernameProblemLanguageResultExecution timeMemory
1278155SSKMFCircle Passing (EGOI24_circlepassing)C++20
31 / 100
284 ms47508 KiB
#include <bits/stdc++.h>
using namespace std;

int lungime;
set <int> capat;

inline int Distanta (const int nod_1 , const int nod_2)
{
    return min(abs(nod_1 - nod_2) , 2 * lungime - abs(nod_1 - nod_2));
}

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_muchii , numar_intrebari;
    cin >> lungime >> numar_muchii >> numar_intrebari;

    while (numar_muchii--)
    {
        int inceput;
        cin >> inceput;
        capat.insert(inceput);
        capat.insert(inceput + lungime);
    }

    while (numar_intrebari--)
    {
        int inceput , sfarsit;
        cin >> inceput >> sfarsit;

        int rezultat = Distanta(inceput , sfarsit);

        set <int> :: iterator locatie = capat.lower_bound(inceput);
        if (locatie != capat.end())
            { rezultat = min(rezultat , Distanta(inceput , *locatie) + 1 + Distanta((*locatie + lungime) % (2 * lungime) , sfarsit)); }
        else
        {
            locatie = capat.begin();
            rezultat = min(rezultat , Distanta(inceput , *locatie) + 1 + Distanta((*locatie + lungime) % (2 * lungime) , sfarsit));
            locatie = capat.find(*capat.rbegin());
        }

        if (locatie != capat.begin()) { locatie--; }
        else { locatie = capat.find(*capat.rbegin()); }

        rezultat = min(rezultat , Distanta(inceput , *locatie) + 1 + Distanta((*locatie + lungime) % (2 * lungime) , sfarsit));

        cout << rezultat << '\n';
    }
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...