Cod sursa(job #109353)

Utilizator alutzuAlexandru Stoica alutzu Data 25 noiembrie 2007 10:24:13
Problema Multimi2 Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 5-8 Marime 1.13 kb
#include<stdio.h>

long long n , s , dmin ;

int main ( )
      {

	 freopen ( "multimi2.in" , "r" , stdin ) ;
	 freopen ( "multimi2.out" , "w" , stdout ) ;

	 scanf ( "%lld" , & n ) ;

	 //facem suma

	 s = n * ( n + 1 ) ;
	 s >>= 1 ;
	 if ( s & 1 )
	    dmin = 1 ;
	 else
	    dmin = 0 ;
	 s >>= 1 ;

	 printf ( "%lld\n" , dmin ) ;

	 //scadem numerele mai mari

	 long long p = n , start = n , stop , nr = 0 , m1 = 0 , m2 = 0 ;

	 while ( s > 0 )
	    {

	       if ( s < p ) // vom scade acel s pt ca s sa fie 0 si vom memora
		  {
		      nr = s ;
		      ++ m1 ;
		      s-= s ;
		  }
	       else
		  if ( s >= p )
		     {
			s-= p ;
			++ m1 ;
			-- p ;
		     }

	    }
	 stop = p + 1 ; // acum in cealalta multime vom pune toate numerele

	 printf ( "%lld\n" , m1 ) ;
	 if ( nr ) printf ( "%lld " , nr ) ;

	 long long i ;

	 for ( i = stop ; i <= start ; i ++ )
	    printf ( "%lld " , i ) ;

	 //pentru a 2a multime
	 m2 = n - m1 ;

	 printf ( "\n%lld\n" , m2 ) ;

	 for ( i = 1 ; i < stop ; i ++ )
	    if ( i != nr )
	       printf ( "%lld " , i ) ;

	 return 0 ;

      }