Cod sursa(job #109736)

Utilizator Adela_BaciuAdela Baciu Adela_Baciu Data 25 noiembrie 2007 12:35:15
Problema Multimi2 Scor 40
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 5-8 Marime 1.33 kb
#include<stdio.h>
#include<math.h>
long k,x,j,suma,n,r,rep,i;
int main()
{
 freopen("multimi2.in","r",stdin);
 freopen("multimi2.out","w",stdout);

 scanf("%ld",&n);

 if((n%4==0)||((n+1)%4==0))
  printf("0\n");
 else
  printf("1\n");

 if(n%4==0)
  x=(n/4)*(n+1);
 else
  if(n%4==3)
   x=((n+1)/4)*n;
  else
   if(n%4==1)
    {
     k=(n-1)/4;
     x=4*k*k+3*k+1;
    }
   else
    if(n%4==2)
     {
      k=(n-2)/4;
      x=4*k*k+5*k+2;
     }


 r=sqrt(1+8*(double long)x);
 r--;
 r=r>>1;

 if((r&1)==0)
  rep=x-((r>>1)*(r+1));
 else
  rep=x-(r*((r+1)>>1));

 /*if(rep==0)
  {
   printf("%lu\n",r);
   for(i=r;i>=1;i--)
	printf("%lu ",i);
  }
 else
 {
  printf("%lu\n",r+1);
  for(i=r;i>=rep;i--)
   printf("%lu ",i);
  printf("%lu ",rep);
  for(i=rep-1;i>=1;i--)
   printf("%lu ",i);
 }  */
 if(rep==0)
 {
  printf("%ld\n",r);
   for(i=1;i<=r;i++)
	printf("%ld ",i);
  printf("\n%ld\n",n-r);
  for(i=r+1;i<=n;i++)
   printf("%ld ",i);
 }
 else
 {
  i=1;
  while(i+rep<=r)
   i++;
  printf("%ld\n",r);
  for(j=1;j<i;j++)
   printf("%ld ",j);
  for(j=i+1;j<=r;j++)
   printf("%ld ",j);
  printf("%ld",i+rep);
  printf("\n%ld\n",n-r);
  printf("%ld ",i);
  for(j=r+1;j<i+rep;j++)
   printf("%ld ",j);
  for(j=i+rep+1;j<=n;j++)
   printf("%ld ",j);
 }
 fcloseall();
 return 0;
}