Cod sursa(job #1070117)

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

using namespace std;
int N, K;

int v[100100];
int val[100100];
int next[100100];

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