Cod sursa(job #1070111)

Utilizator vlad_DVlad Dumitriu vlad_D Data 30 decembrie 2013 23:35:19
Problema Farfurii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

using namespace std;
int N, K;

struct nod {
  int v;
  nod* next;
};
int v[100100];
int main() {
  freopen("farfurii.in", "r", stdin);
  freopen("farfurii.out", "w", stdout);
  scanf("%d %d", &N, &K);
  nod* lista = new nod;
  lista->v = 1;
  lista->next = NULL;
  nod* p = lista;
  for (int i = 2; i <= N; ++i) {
    p->next = new nod; p = p->next;
    p->v = i; p->next = NULL;
  }
  for (int i = 1; i < N; ++i) {
    if ((N - i + 1) * (N - i) / 2 == K) {
      v[0] = 0;
      p = lista;
      while (p) {
        v[++v[0]] = p->v;
        p = p->next;
      }
      for (int i = v[0]; i > 1; --i) {
        printf("%d ", v[i]);
      }
      printf("%d\n", v[0]);
      return 0;
    }
    int K2 = (N - i) * (N - i - 1) / 2;
    int al = 0;
    if (K2 < K) al = K - K2, K -= al;
    p = lista;
    nod* pr = NULL;
    while (al--) { pr = p; p = p->next; }
    printf("%d ", p->v);
    if (pr != NULL) { pr->next = p->next; delete p;}
    else { lista = p->next; delete p; }
  }
  printf("%d\n", lista->v);
  delete lista;
  return 0;
}