Cod sursa(job #1734536)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 27 iulie 2016 16:55:31
Problema Multimi2 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <fstream>
#include <math.h>
#include <algorithm>
#include <vector>

using namespace std;
#define ll long long
#define llu long long unsigned
#define pb push_back
#define mp make_pair

string problemName = "multimi2";
string inFile = problemName+".in";
string outFile = problemName+".out";
ifstream fin(inFile.c_str());
ofstream fout(outFile.c_str());

vector <int> mul1, mul2;

int main(){
    int n,comp,i,j,turn;
    comp = 0;
    ll target;
    fin>>n;
    target = 1LL*n*(n+1)/4;
    turn = 0;
    if(n%4 == 0){
        fout<<0<<'\n';
        for(i = 1, j = n, turn = 0;i < j;i++, j--){
            if(turn == 0){
                mul1.pb(i);
                mul1.pb(j);
            }else{
                mul2.pb(i);
                mul2.pb(j);
            }
            turn ^= 1;
        }
    }else if(n%4 == 2){
        fout<<1<<'\n';
        for(i = 1, j = n, turn = 0;i + 1 < j - 1;i++, j--){
            if(turn == 0){
                mul1.pb(i);
                mul1.pb(j);
            }else{
                mul2.pb(i);
                mul2.pb(j);
            }
            turn ^= 1;
        }
        mul1.pb(i);
        mul2.pb(j);
    }else if(n%4 == 1){
        fout<<1<<'\n';
        ll sum = 0;
        for(i = 1;i <= n && comp == 0 && sum != target;i++){
            sum += i;
            mul1.pb(i);
            if(target-sum <= n){
                comp = target-sum;
            }
        }
        for(;i <= n;i++){
            if(i == comp){
                mul1.pb(i);
            }else{
                mul2.pb(i);
            }
        }
    }else{
        fout<<0<<'\n';
        ll sum = 0;
        for(i = n;i >= 1 && comp == 0 && sum != target;i--){
            sum += i;
            mul1.pb(i);
            if(target-sum < i){
                comp = target-sum;
            }
        }
        for(;i >= 1;i--){
            if(i == comp){
                mul1.pb(i);
            }else{
                mul2.pb(i);
            }
        }
    }
    fout<<mul1.size()<<'\n';
    for(auto it : mul1){
        fout<<it<<' ';
    }
    fout<<'\n'<<mul2.size()<<'\n';
    for(auto it : mul2){
        fout<<it<<' ';
    }
    return 0;
}