Cod sursa(job #109369)

Utilizator ilincaSorescu Ilinca ilinca Data 25 noiembrie 2007 10:31:57
Problema Multimi2 Scor 40
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 5-8 Marime 1.16 kb
#include <stdio.h>
#include <math.h>

	unsigned long n, k;

 int bs (int st, int dr, unsigned long v [], unsigned long r)
       {
	  unsigned long m;
	  if (st <= dr)
	    {
		m=(st+dr)/2;
		if (v [m] == r)
		    return m;
		if (v [m] > r)
		    return bs (m+1, dr, v, r);
		return bs (st, m-1, v, r);
	    }
	   else
		return 0;
       }

 int main ()
	 {
	    freopen ("multimi2.in", "r", stdin);
	    freopen ("multimi2.out", "w", stdout);
	    int num=0;
	    unsigned long m, i, o, v [10001];
	    scanf ("%lu", &n);
	    k=n*(n+1)/4;
	    m=(long double)n*(n+1)/2-k;
	    if (m > k)
	    printf ("%lu\n", (unsigned long)(m-k));
	    else
		printf ("%lu\n", (unsigned long)(k-m));
	    o=n;
	    while (k)
		 {
		     if (k >= o)
		       {
			   k=k-o;
			   v [++num]=o;
			   o--;
		       }
		      else
			  {
			      v [++num]=k;
			      k=0;
			   }
		 }
	    printf ("%d\n", num);
	    for (i=num; i > 0; i--)
		 printf ("%lu ", v [i]);
	    printf ("\n%d\n", n-num);
	    for (i=1; i<=n; i++)
	       {
		   if (bs (1, num, v, i) == 0)
		       printf ("%lu ", i);
	       }
	    fcloseall ();
	    return 0;
	 }