Pagini recente » Cod sursa (job #2784193) | Cod sursa (job #2148687) | Cod sursa (job #2716669) | Cod sursa (job #2323560) | Cod sursa (job #575667)
Cod sursa(job #575667)
#include<fstream>
#include<algorithm>
#define MAx 1000001
using namespace std;
int n;
//int v[MAx];
int a[MAx], b[MAx];
int La, Lb, diferenta;
ifstream fin("multimi2.in");
ofstream fout("multimi2.out");
void afis()
{
fout << diferenta << "\n";
sort(a+1, a+La+1);
sort(b+1, b+Lb+1);
fout << La << "\n";
for(int i=1; i<=La; i++) fout << a[i] << " ";
fout << "\n" << Lb << "\n";
for(int i=1; i<=Lb; i++) fout << b[i] << " ";
fout << "\n";
}
void solve_0()
{
if(n%4 == 0)
{
diferenta = 0;
int k=n/4;
for(int i=1; i<=2*k-1; i+=2)
a[++La] = i, a[++La] = n-i+1;
for(int i=2; i<=2*k; i+=2)
b[++Lb] = i, b[++Lb] = n-i+1;
}
}
void solve_1()
{
if(n%4 == 1)
{
diferenta = 1;
int k = n/4;
int ok_A, ok_B, caut;
for(int i=1; i<2*k; i+=2)
{
a[++La] = i;
a[++La] = n-i+1;
if( i == k ) ok_A = 1, caut = i;
}
for(int i=2; i<=2*k; i+=2)
{
b[++Lb] = i;
b[++Lb] = n-i+1;
if( i == k ) ok_B = 1, caut = i;
}
if(k%2) b[++Lb] = a[caut], a[caut] = 2*k+1;
else a[++La] = b[caut], b[caut] = 2*k+1;
}
}
void solve_2()
{
if(n%4 == 2)
{
diferenta = 1;
int k = n/4;
for(int i=1; i<2*k; i+=2)
a[++La] = i, a[++La] = n-i+1;
for(int i=2; i<=2*k; i+=2)
b[++Lb] = i, b[++Lb] = n-i+1;
a[++La] = 2*k+1;
b[++Lb] = 2*k+2;
}
}
void solve_3()
{
if(n%4 == 3)
{
diferenta=0;
int k=n/4;
int /*ok_A, ok_B, */caut;
for(int i=1; i<2*k; i+=2)
{
a[++La] = i;
a[++La] = n-i+1;
if( i == k ) caut = i;
}
for(int i=2; i<=2*k; i+=2)
{
b[++Lb] = i;
b[++Lb] = n-i+1;
if( i == k ) caut = i;
}
if(k%2)
{
b[++Lb] = a[caut];
b[++Lb] = 2*k+3;
a[caut] = 2*k+1;
a[++La] = 2*k+2;
}
else
{
a[++La] = b[caut];
a[++La] = 2*k+3;
b[caut] = 2*k+1;
b[++Lb] = 2*k+2;
}
}
}
int main()
{
fin >> n;
solve_0();
solve_1();
solve_2();
solve_3();
afis();
return 0;
}