Cod sursa(job #3222891)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 11 aprilie 2024 20:17:26
Problema Multimi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>

using namespace std;

ifstream cin ("multimi2.in");
ofstream cout ("multimi2.out");

#define N 1000000
#define D 0

int f[N+5], v1[N+5], v2[N+5];

int main()
{
    int n,i,p,n1,n2,x;
    unsigned long long int s,sum,k,a,b,dif;
    cin >> n;
    s=0;
    for (i=1; i<=n; i++)
        s+=i;
    cout << s%2 << '\n';
    k=s/2;
    if (s%2==1)
        k++;
    sum=p=0;
    for (i=n; i>s%2; i--){
        if (sum+i<=k){
            sum+=i;
            f[i]=1;
        }else
            break;
    }
    x=0;
    if (sum<=k)
        for (i=s%2+1; i<=n; i++){
            if (sum+i<=k){
                if (i>x)
                    x=i;
                sum+=i;
                f[i]=1;
            }else
                break;
        }
    n1=n2=0;
    for (i=1; i<=n; i++)
        if (f[i]==1)
            v1[n1++]=i;
    for (i=1; i<=n; i++)
        if (f[i]==0)
            v2[n2++]=i;
    a=b=0;
    for (i=1; i<=n; i++){
        if (f[i]==0)
            a+=i;
        else
            b+=i;
    }
    dif=a-b;
    dif/=2;
    for (i=0; i<n1; i++)
        if (v1[i]==(unsigned long long)x)
            v1[i]=(unsigned long long)x+dif;
    for (i=0; i<n2; i++)
        if (v2[i]==(unsigned long long)x+dif)
            v2[i]=(unsigned long long)x;
    cout << n1 << '\n';
    for (i=0; i<n1; i++)
        cout << v1[i] << ' ';
    cout << '\n' << n2 << '\n';
    for (i=0; i<n2; i++)
        cout << v2[i] << ' ';
    if (D)
        cout << '\n' << b << ' ' << a << '\n';
    return 0;
}