Cod sursa(job #2490483)

Utilizator adiaioanaAdia R. adiaioana Data 10 noiembrie 2019 13:12:13
Problema Multimi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <fstream>

using namespace std;
ifstream cin("multimi2.in");
ofstream cout("multimi2.out");
int N, k,a,b,dif;
bool viz[1000100];
int main()
{
    cin>>N;
    if(N%4==0)
    {
        cout<<0<<'\n'<<N/2<<'\n';
        for(int i=1; i<=N; ++i)
        {
            k=i/4;
            if((k%2==0 && i%4==1) || (k%2==1 && i%4==0) || (k%2==1 && i%4==2) || (k%2==1 && i%4==3))
                cout<<i<<' ', viz[i]=1;
        }
        cout<<'\n'<<N/2<<'\n';
        for(int i=1; i<=N; ++i)
            if(!viz[i])
                cout<<i<<' ';
    }
    else if(N%4==3)
    {
        cout<<0<<'\n'<<(N/2)+1<<'\n';
        cout<<1<<' '<<2<<' ';
        a=4; b=7; dif=3; viz[1]=viz[2]=1;
        for(int i=4; i<=N; ++i)
        {
            if(a==i || i==b)
                cout<<i<<' ',viz[i]=1;
            else if(i>b)
            {
                dif=4-dif;
                a=b+2; b=a+dif;
            }
        }
        cout<<'\n'<<(N/2)<<'\n';
        for(int i=1; i<=N; ++i)
            if(!viz[i])
                cout<<i<<' ';
    }
    else{
        cout<<1<<'\n';
        if(N%4==2)
        {
            cout<<(N/2)<<'\n';
            cout<<1<<' ';
            viz[1]=1;
            a=3; b=6; dif=3;
            for(int i=3; i<=N; ++i)
            {
            if(a==i || i==b)
                cout<<i<<' ',viz[i]=1;
            else if(i>b)
            {
                dif=4-dif;
                a=b+2; b=a+dif;
            }
            }
            cout<<'\n'<<(N/2)<<'\n';
            for(int i=1; i<=N; ++i)
                if(!viz[i])
                    cout<<i<<' ';
        }
        else{
            cout<<(N/2)+1<<'\n';
            cout<<1<<' ';
            viz[1]=1;
            a=2; b=5; dif=3;
            for(int i=2; i<=N; ++i)
            {
            if(a==i || i==b)
                cout<<i<<' ',viz[i]=1;
            else if(i>b)
            {
                dif=4-dif;
                a=b+2; b=a+dif;
            }
            }
            cout<<'\n'<<(N/2)<<'\n';
            for(int i=1; i<=N; ++i)
                if(!viz[i])
                    cout<<i<<' ';

        }
    }
    return 0;
}