Cod sursa(job #2897858)

Utilizator mirceaspPetcu Mircea mirceasp Data 5 mai 2022 01:55:36
Problema Zeap Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.69 kb
#include <fstream>
#include <set>
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <stdio.h>
#include <iterator>
#define po 48
using namespace std;
set<long long >zeap;
set<long long> diferente;
long long create_number(char *s)
{
    long long x = 0,p = 1;
    for(long long i = 2;s[i] > 47 && s[i] < 58;++i) { x += p * ((int) s[i] - po); p*= 10; }
    long long copie = x;
    x = 0;
    p = 1;
    while (copie)
    {
        x += copie%10*p;
        p*=10;copie /= 10;
    }
    return x;
}
int main()
{
//    ifstream f("zeap.in");
    ofstream g("zeap.out");
    string operatie;
    long long nr;
    set<long long >::iterator curent,previos,nextp;
    long long i = 0;
    FILE *pFile;
    char s[100];
    pFile = fopen("zeap.in","r");
    if(pFile == NULL) perror("Error opening file");
    else {
        while (fgets(s, 100, pFile) != NULL) {
            if (s[0] == 'I') {
                long long nr = create_number(s);
                if (zeap.find(nr) != zeap.end())
                    continue;
                else {
                    zeap.insert(nr);
                    i++;
                }
                if (zeap.size() >= 2) {
                    curent = zeap.find(nr);
                    previos = nextp = curent;
                    nextp++;
                    previos--;
                    auto l = zeap.end();
                    l--;
                    if (curent != diferente.begin() && curent != l) {
                        diferente.insert(abs(*curent - *nextp));
                        diferente.insert(abs(*curent - *previos));
                    } else if (curent != diferente.begin())
                        diferente.insert(abs(*curent - *previos));
                    else if (curent != l)
                        diferente.insert(abs(*curent - *nextp));
                }
            } else if (s[0] == 'C') {
                long long nr = create_number(s);
                if (zeap.find(nr) != zeap.end())
                    g << 1 << '\n';
                else
                    g << 0 << '\n';
            } else if (s[0] == 'S') {
                long long nr = create_number(s);
                if (zeap.find(nr) != zeap.end()) {
                    curent = zeap.find(nr);
                    previos = nextp = curent;
                    previos--;
                    nextp++;
                    auto l = zeap.end();
                    l--;
                    if (curent != diferente.begin() && curent != l) {
                        diferente.erase(abs(*curent - *nextp));
                        diferente.erase(abs(*curent - *previos));
                    } else if (curent != diferente.begin())
                        diferente.erase(abs(*curent - *previos));
                    else if (curent != l)
                        diferente.erase(abs(*curent - *nextp));
                    diferente.insert(abs(*nextp - *previos));
                    zeap.erase(nr);
                } else
                    g << -1 << '\n';
            } else if (s[1] == 'A') {
                if (zeap.size() < 2)
                    g << -1 << '\n';
                else {
                    long long first = *next(zeap.begin(), 0);
                    long long last = *next(zeap.begin(), zeap.size() - 1);
                    g << abs(last - first) << '\n';
                }
            } else if (s[1] == 'I') {
                if (zeap.size() >= 2) {
                    long long minim = *diferente.begin();
                    g << minim << '\n';
                } else g << -1 << '\n';
            }

        }
    }
    g.close();
    fclose(pFile);
    return 0;
}