Cod sursa(job #2619326)

Utilizator andreea.vasilescuAndreea Vasilescu andreea.vasilescu Data 27 mai 2020 14:35:57
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.73 kb
#include <fstream>

using namespace std;
ifstream in("input.in");
ofstream out("output.out");

int z1=0,l1=0,an1=0;

int z2=0,l2=0,an2=0;

const int nmax=21;

char s1[nmax+1], s2[nmax+1];

const int v[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

bool verifbis(int n)
{
    if((n%4==0 && n%100!=0) || n%400==0)
        return 1;
    else
        return 0;
}

int bis=366, norm=365;

int main()
{
    in>>s1;
    in>>s2;
    for(int i=0; i<=1; i++)
    {
        z1=z1*10+(s1[i]-'0');
        z2=z2*10+(s2[i]-'0');
    }
    for(int i=3; i<=4; i++)
    {
        l1=l1*10+(s1[i]-'0');
        l2=l2*10+(s2[i]-'0');
    }
    for(int i=6; i<=9; i++)
    {
        an1=an1*10+(s1[i]-'0');
        an2=an2*10+(s2[i]-'0');
    }
    int t=1;
        int inainte=0;
        for(int i=an1; i>=1900; i--)
        {
            if(verifbis(i)==1)
              {
                  inainte=i; break;
              }
        }
        int diferenta=inainte-1900;
        int nranibis=0;
        if(diferenta==200)
            nranibis=59;
        else
            nranibis=diferenta/4;
        int adaos=0;
        for(int i=1; i<=diferenta-nranibis; i++)
            adaos+=(365%7);
        for(int i=1; i<=nranibis; i++)
            adaos+=(366%7);
        for(int i=inainte+1; i<an1; i++)
            adaos+=1;
        adaos=adaos%7;
        int zicur1;
        zicur1=(1+adaos)%7;
        t=2;

        int inainte2=0;
        for(int i=an2; i>=1900; i--)
        {
            if(verifbis(i)==1)
                {inainte2=i;break;}
        }
        int diferenta2=inainte2-1900;
        int nranibis2=0;
        if(diferenta2==200)
            nranibis2=59;
        else
            nranibis2=diferenta2/4;
        int adaos2=0;
        for(int i=1; i<=diferenta2-nranibis2; i++)
            adaos2+=1;
        for(int i=1; i<=nranibis2; i++)
            adaos2+=2;
        for(int i=inainte2+1; i<an2; i++)
            adaos2+=1;
        adaos2=adaos2%7;
        int zicur2;
        zicur2=(1+adaos2)%7;
    //ziua 1 reprezinta ziua 1 a anului cautat
    //de la ziua 1 la ziua cautata voma avea x1 zile
    int x1=0;
    for(int i=0; i<l1-1; i++)
        x1+=v[i];
    x1=x1+z1-1;
    //ziua 1 reprezinta ziua 1a anului cautat
    //de la ziua 2 la ziua cautata vom avea x2 zile;
    int x2=0;
    for(int i=0; i<l2-1; i++)
        x2+=v[i];
    x2=x2+z2-1;
    //aflu cate zile sunt intre cei doi ani
    int nrziletot=0;
    for(int i=an1; i<an2; i++)
     {
         if(verifbis(i)==0)
            nrziletot+=2;
        else
            nrziletot+=1;
     }
    int z0;
    z0=nrziletot-x1+x2;
    int zistart=(zicur1+x2)%7;
    out<<zistart+z0%7;
    return 0;
}