Cod sursa(job #1450217)

Utilizator cristina_borzaCristina Borza cristina_borza Data 11 iunie 2015 22:41:51
Problema Multimi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.28 kb
#include <fstream>
#define NMAX 1000005
using namespace std;

ifstream f("multimi2.in");
ofstream g("multimi2.out");

int sol[NMAX] , n , nr1 , nr2;

int main()
{
    f >> n ;
    if(n % 4 == 0){
        g << 0 << '\n' ;
        for(int i = 1 ; i <= n / 2 ; ++i){
            if(i % 2 == 1){
                sol[i] = sol[n - i + 1] = 1 ;
                nr1+=2;
            }
            else{
                sol[i] = sol[n - i + 1] = 2 ;
                nr2+=2;
            }
        }
        g << nr1 << '\n';
        for(int i = 1 ; i <= n ; ++i){
            if(sol[i] == 1){
                g << i << " " ;
            }
        }
        g << '\n' << nr2 << '\n';
        for(int i = 1 ; i <= n ; ++i){
            if(sol[i] == 2){
                g << i << " ";
            }
        }
        return 0 ;
    }
    if(n % 4 == 1){

        g << 1 << '\n' ;
        --n;
        sol[0] = 1 , nr1 = 1 ;
        for(int i = 1 ; i <= n / 2 ; ++i){
            if(i % 2 == 1){
                sol[i] = sol[n - i + 1] = 1 ;
                nr1+=2;
            }
            else{
                sol[i] = sol[n - i + 1] = 2 ;
                nr2+=2;
            }
        }
        g << nr1 << '\n';
        for(int i = 0 ; i <= n ; ++i){
            if(sol[i] == 1){
                g << i + 1 << " " ;
            }
        }
        g << '\n' << nr2 << '\n';
        for(int i = 0 ; i <= n ; ++i){
            if(sol[i] == 2){
                g << i + 1 << " ";
            }
        }
        return 0 ;
    }
    if(n % 4 == 2){

        g << 1 << '\n' ;
        int i ;
        for(i = 1 ; i < n / 2 ; ++i){
            if(i % 2 == 1){
                sol[i] = sol[n - i + 1] = 1 ;
                nr1+=2;
            }
            else{
                sol[i] = sol[n - i + 1] = 2 ;
                nr2+=2;
            }
        }
        if(i % 2 == 1){
            sol[i] = 1 , sol[i + 1] = 2;
        }
        else{
            sol[i] = 2 , sol[i + 1] = 1;
        }
        ++nr1 , ++nr2;
        g << nr1 << '\n';
        for(int i = 1 ; i <= n ; ++i){
            if(sol[i] == 1){
                g << i << " " ;
            }
        }
        g << '\n' << nr2 << '\n';
        for(int i = 1 ; i <= n ; ++i){
            if(sol[i] == 2){
                g << i << " ";
            }
        }
        return 0 ;
    }
    if(n % 4 == 3){
        g << 0 << '\n' ;
        sol[0] = 1 ;
        --n; nr1 = 1 ;
        int i ;
        for(i = 1 ; i < n / 2 ; ++i){
            if(i % 2 == 1){
                sol[i] = sol[n - i + 1] = 1 ;
                nr1+=2;
            }
            else{
                sol[i] = sol[n - i + 1] = 2 ;
                nr2+=2;
            }
        }
        if(i % 2 == 1){
            sol[i] = 1 , sol[i + 1] = 2;
        }
        else{
            sol[i] = 2 , sol[i + 1] = 1;
        }
        ++nr1 , ++nr2;
        g << nr1 << '\n';
        for(int i = 0 ; i <= n ; ++i){
            if(sol[i] == 1){
                g << i + 1 << " " ;
            }
        }
        g << '\n' << nr2 << '\n';
        for(int i = 0 ; i <= n ; ++i){
            if(sol[i] == 2){
                g << i + 1 << " ";
            }
        }
        return 0 ;
    }
    return 0;
}