Cod sursa(job #1837187)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 29 decembrie 2016 10:37:42
Problema Multimi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
using namespace std;
int n,s,poz;
long long sum;
vector <int> a,b;

int main()
{
    int i,j;
    freopen("multimi2.in","r",stdin);
    freopen("multimi2.out","w",stdout);
    scanf("%d",&n);
    s=(1LL*n*(n+1)/2)%2;

    srand(time(0));
    for (i=1;i<=n;i++) {
        if (sum>s) {
            sum-=i;
            a.push_back(i);
        }
        else {
            sum+=i;
            b.push_back(i);
        }
    }
    while (sum!=s&&sum!=-s) {
        poz=1LL*rand()*rand()%n;
        if (b.size()==0||(a.size()&&sum<s)) {
            poz%=a.size();
            b.push_back(a[poz]);
            sum+=2*a[poz];
            swap(a[poz],a[a.size()-1]);
            a.pop_back();
        }
        else {
            poz%=b.size();
            a.push_back(b[poz]);
            sum-=2*b[poz];
            swap(b[poz],b[b.size()-1]);
            b.pop_back();
        }
    }
    printf("%d\n",s);
    printf("%d\n",a.size());
    for (i=0;i<a.size();i++)
        printf("%d ",a[i]);

    printf("\n%d\n",b.size());
    for (i=0;i<b.size();i++)
        printf("%d ",b[i]);
    return 0;
}