Cod sursa(job #173688)

Utilizator alecmanAchim Ioan Alexandru alecman Data 7 aprilie 2008 22:43:32
Problema Farfurii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>

#define INPUT "farfurii.in"
#define OUTPUT "farfurii.out"
#define NMAX 100001

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

long final[ NMAX ], N, K;

void readValues()
{
  fscanf(fin, "%ld %ld", &N, &K);
}

void printSolution()
{
  for(long i = 1; i <= N; ++i)
    fprintf(fout, "%ld ", final[ i ]);

  fprintf(fout, "\n");
}

void solveFunction()
{
  long prod, cont, rest, nrNum, ind, maxim;

  prod = 1;
  cont = 1;

  while(prod < K)
  {
    prod = cont * (cont + 1) / 2;
    ++cont;
  }

  --cont;
  --cont;

  prod = cont * (cont + 1) / 2;

  rest = K - prod;

  nrNum = N - cont - 2;

  for(long i = 1; i <= nrNum; ++i)
    final[ i ] = i;

  ind = cont + 1 - rest;

  final[ nrNum + 1 ] = nrNum + ind + 1;

  maxim = N;

  for(long i = nrNum + 2; i <= N - ind; ++i)
  {
    final[ i ] = maxim;
    --maxim;
  }

  maxim = nrNum + ind;

  for(long i = N - ind + 1; i <= N; ++i)
  {
    final[ i ] = maxim;
    --maxim;
  }

  printSolution();
}

int main()
{
  readValues();

  solveFunction();

  fclose(fin);
  fclose(fout);

  return 0;
}