Cod sursa(job #308836)

Utilizator Addy.Adrian Draghici Addy. Data 28 aprilie 2009 18:41:43
Problema Multimi2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <stdio.h>
#define DIM 500005

int i,n,k,t,dif;
int v[DIM],w[DIM];

  FILE *f = fopen("multimi2.in","r");
  FILE *g = fopen("multimi2.out","w");

void rest0() {
  for (i=1; i<=n; i++) 
	switch (i%4) {
	  case 1: v[++k] = i; break;
      case 2: w[++t] = i; break;
	  case 3: w[++t] = i; break;
	  case 0: v[++k] = i; break;
	}
  dif = 0;	
}

void rest1() {
  v[++k] = 1;
  for (i=2; i<=n; i++) 
	switch (i%4) {
	  case 1: v[++k] = i; break;
      case 2: w[++t] = i; break;
	  case 3: w[++t] = i; break;
	  case 0: v[++k] = i; break;
	}
  dif = 1;
}

void rest2() {
  v[++k] = 1;
  w[++t] = 2;
  for (i=3; i<=n; i++) 
	switch (i%4) {
	  case 1: v[++k] = i; break;
      case 2: w[++t] = i; break;
	  case 3: w[++t] = i; break;
	  case 0: v[++k] = i; break;
	}
  dif = 1;
}

void rest3() {
  v[++k] = 1;
  v[++k] = 2;
  w[++t] = 3;
  for (i=4; i<=n; i++) 
	switch (i%4) {
	  case 1: v[++k] = i; break;
      case 2: w[++t] = i; break;
	  case 3: w[++t] = i; break;
	  case 0: v[++k] = i; break;
	}
  dif = 0;
}

void afisare() {
  fprintf(g,"%d\n%d\n",dif,k);
  for (i=1; i<=k; i++)
	fprintf(g,"%d ",v[i]);
  fprintf(g,"\n%d\n",t);
  for (i=1; i<=t; i++)
	fprintf(g,"%d ",w[i]);
}

int main() {
	
  fscanf(f,"%d",&n);
  
  switch (n%4) {
    case 0: rest0(); break;
	case 1: rest1(); break;
	case 2: rest2(); break;
	case 3: rest3(); break;
  }
  
  afisare();
  
  fclose(f);
  fclose(g);  
	
  return 0;
}