Cod sursa(job #2894987)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 28 aprilie 2022 17:46:37
Problema A+B Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3 kb
#include <iostream>
#include <vector>
using namespace std;

class InParser{///admite citirea de int,long long, char si a cuvintelor
    const int SIZE=50000;
    FILE *fin;
    char *buffer;
    int p;

    char read_ch(){
        ++p;
        if(p==SIZE){
            p=0;
            fread(buffer,sizeof(char),SIZE,fin);
        }
        return buffer[p];
    }

public:
    InParser(const char *name){
        fin=fopen(name,"r");
        buffer=new char[SIZE];
        p=SIZE-1;
    }
    ~InParser(){
        delete []buffer;
    }
    template<class integer>//pt int si long long
    InParser& operator>>(integer &n){
        char ch;
        do{
            ch=read_ch();
        }while(!isdigit(ch)&&ch!='-');

        int sign=1;
        if(ch=='-'){
            sign=-1;
            ch=read_ch();
        }
        n=0;
        do{
            n=n*10+ch-'0';
            ch=read_ch();
        }while(isdigit(ch));
        n*=sign;
        return (*this);
    }
    InParser& operator>>(char &ch){
        ch=read_ch();
        return (*this);
    }
    InParser& operator>>(char *s){//pt citirea un cuvant(cuvintele se considera delimitate de ' ' sau '\n')
        char ch;
        do{
            ch=read_ch();
        }while(ch==' '||ch=='\n');
        int ptr=0;
        do{
            s[ptr]=ch;
            ptr++;
            ch=read_ch();
        }while(ch!=' '&&ch!='\n');
        s[ptr]='\0';
        return (*this);
    }
};

class OutParser{///admite afisarea de int,long long, char si a cuvintelor
    const int SIZE=50000;
    FILE *fout;
    char *buffer;
    int p;

    void write_ch(char ch){
        if(p==SIZE){
            fwrite(buffer,sizeof(char),SIZE,fout);
            p=0;
        }
        buffer[p++]=ch;
    }

public:
    OutParser(const char *name){
        fout=fopen(name,"w");
        buffer= new char[SIZE];
        p=0;
    }
    ~OutParser(){
        fwrite(buffer,sizeof(char),p,fout);
        fclose(fout);
        delete []buffer;
    }
    template<class integer>//pt int si long long
    OutParser& operator<<(integer n){
        if(n==0){
            write_ch(0);
            return (*this);
        }
        bool negative=false;
        if(n<0){
            n*=-1;
            negative=true;
        }
        vector<char>v;
        while(n){
            v.push_back('0'+n%10);
            n/=10;
        }
        if(negative){
            v.push_back('-');
        }
        int len=v.size();
        for(int i=len-1;i>=0;i--){
            write_ch(v[i]);
        }
        return (*this);
    }
    OutParser& operator<<(char ch){
        write_ch(ch);
        return (*this);
    }
    OutParser& operator<<(char *ch){//pt afisarea unui cuvant
        while(*ch){
            write_ch(*ch);
            ++ch;
        }
        return (*this);
    }
};

InParser fin("adunare.in");
OutParser fout("adunare.out");

int main(){
    long long a,b;
    fin>>a>>b;
    fout<<a+b;
}