Problem p02264 (C++) — buggy submission, verdict: Memory Limit Exceeded

/*
    ???????????????????????????????????????¢??I
    ???????????????????\\??????????????±??????????????????????I
*/

#define VERNIY                                                                 \\
  st();                                                                        \\
  int ver = 0, niy = 0, hbk = 0

#include <algorithm>
#include <ctype.h>
#include <float.h>
#include <functional>
#include <iostream>
#include <iterator>
#include <limits.h>
#include <map>
#include <math.h>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <utility>
#include <vector>
#define LLU unsigned long long int
#define LL long long int
using namespace std;
#define Lfmax DBL_MAX
#define LLUmax ULLONG_MAX
#define LLmax LLONG_MAX
#define dmax INT_MAX
#define vd vector<int>
#define vpd vector<pair<int, int>>
#define vLL vector<long long int>
#define vpLL vector<pair<long long int, long long int>>
#define vLLU vector<unsigned long long int>
#define vpLLU vector<pair<unsigned long long int, unsigned long long int>>
#define pd pair<int, int>
#define pLL pair<long long int, long long int>
#define pLLU pair<unsigned long long int, unsigned long long int>
#define qd queue<int>
#define qpd queue<pair<int, int>>
#define maxpqd priority_queue<int>
#define minpqd priority_queue<int, vector<int>, greater<int>>
#define pb push_back
#define mp make_pair
#define fi first
#define sec second
#define debugarr(a, b)                                                         \\
  for (int i = 0; i < b; i++)                                                  \\
    printf("%d ", a[i]);                                                       \\
  printf("\\n")
#define newline printf("\\n")
#define forin(a, b, c) for (int a = b; a < c; ++a)
#define forineq(a, b, c) for (int a = b; a <= c; ++a)
#define forde(a, b, c) for (int a = b; a >= c; --a)
#define UPC(oo) (oo >= 'A' && oo <= 'Z')
#define LWC(oo) (oo >= 'a' && oo <= 'z')
#define DGT(oo) (oo >= '0' && oo <= '9')
#define UPCVOC(oo)                                                             \\
  (oo == 'A' || oo == 'E' || oo == 'I' || oo == 'U' || oo == 'O')
#define LWCVOC(oo)                                                             \\
  (oo == 'a' || oo == 'e' || oo == 'i' || oo == 'u' || oo == 'o')
#define filein freopen("in.txt", "r", stdin);
#define fileout freopen("out.txt", "w", stdout);
#define setarr(a, b, c) memset(a, b, sizeof(c))

inline void scd(int &a) { scanf("%d", &a); }
inline void scdd(int &a, int &b) { scanf("%d %d", &a, &b); }
inline void sctd(int &a, int &b, int &c) { scanf("%d %d %d", &a, &b, &c); }
inline void sctlld(LL &a, LL &b, LL &c) {
  scanf("%I64d %I64d %I64d", &a, &b, &c);
}
inline void scdlld(LL &a, LL &b) { scanf("%I64d %I64d", &a, &b); }
inline void sclld(LL &a) { scanf("%I64d", &a); }
inline void scllu(LLU &a) { scanf("%I64u", &a); }
inline void scdllu(LLU &a, LLU &b) { scanf("%I64u %I64u", &a, &b); }
inline void sctllu(LLU &a, LLU &b, LLU &c) {
  scanf("%I64u %I64u %I64u", &a, &b, &c);
}

template <class Ver> inline void prd(Ver a) { cout << a << "\\n"; };
template <class Ver> inline void prdd(Ver a, Ver b) {
  cout << a << " " << b << "\\n";
};
template <class Ver> inline void prtd(Ver a, Ver b, Ver c) {
  cout << a << " " << b << " " << c << "\\n";
};

inline void debug() { printf("asd\\n"); }
template <class Ver> inline void debugd(Ver a) { cout << "--- " << a << endl; };
template <class Ver> inline void debugdd(Ver a, Ver b) {
  cout << "--- " << a << " " << b << endl;
};
template <class Ver> inline void debugtd(Ver a, Ver b, Ver c) {
  cout << "--- " << a << " " << b << " " << c << endl;
};

#define grav 9.8
#define pi 3.14159265

void st() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
}

int main() {
  VERNIY;
  queue<pair<string, int>> a;
  cin >> ver >> niy;
  int b;
  string c;
  forin(i, 0, ver) {
    cin >> c >> b;
    a.push(mp(c, b));
  }
  int accu = 0;
  while (!a.empty()) {
    if (a.front().sec <= niy) {
      accu += a.front().sec;
      cout << a.front().fi << " " << accu << "\\n";
      a.pop();
      continue;
    }
    accu += niy;
    a.push(mp(a.front().fi, a.front().sec - niy));
    a.pop();
  }

  return 0;
}

/*
    ???????????????????????????????????????¢??I
    ???????????????????\\??????????????±??????????????????????I
*/

Error: MLE

Fixed submission:

/*
    ???????????????????????????????????????¢??I
    ???????????????????\\??????????????±??????????????????????I
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LLU unsigned long long int
#define LL long long int
#define forin(a, b, c) for (int a = b; a < c; ++a)
#define forineq(a, b, c) for (int a = b; a <= c; ++a)
#define forde(a, b, c) for (int a = b; a >= c; --a)
inline void scd(int &a) { scanf("%d", &a); }
inline void scdd(int &a, int &b) { scanf("%d %d", &a, &b); }
inline void sctd(int &a, int &b, int &c) { scanf("%d %d %d", &a, &b, &c); }

typedef struct node {
  int a;
  char b[200000];
  struct node *prev, *next;
} node;

node *head = NULL, *tail = NULL;

node *newNode(int a, char *b) {
  node *tmp = (node *)malloc(sizeof(node));
  tmp->prev = NULL;
  tmp->next = NULL;
  tmp->a = a;
  strcpy(tmp->b, b);

  return tmp;
}

void push(int a, char *b) {
  node *poi = newNode(a, b);
  if (head == NULL && tail == NULL) {
    head = tail = poi;
    return;
  }
  tail->next = poi;
  poi->prev = tail;
  tail = poi;
  tail->next = NULL;
}

void pop() {
  if (head == NULL && tail == NULL)
    return;

  if (head == tail) {
    free(head);
    head = tail = NULL;
    return;
  }

  head = head->next;
  free(head->prev);
  head->prev = NULL;
}

void show() {
  node *poi = head;
  while (poi != NULL) {
    printf("%s %lld\\n", poi->b, poi->a);
    poi = poi->next;
  }
}

int main() {
  int a, b;
  scdd(a, b);
  char n[20];
  int c;
  forin(z, 0, a) {
    scanf("%s %d", n, &c);
    push(c, n);
  }
  // show();
  int accu = 0;
  node *poi = head;
  while (poi != NULL) {
    // printf("%lld\\n",head->a);
    if (poi->a <= b) {
      accu += head->a;
      printf("%s %d\\n", head->b, accu);
      poi = poi->next;
      pop();
      continue;
    }
    accu += b;
    push(poi->a - b, poi->b);
    poi = poi->next;
    pop();
    // show();
  }
  return 0;
}

/*
    ???????????????????????????????????????¢??I
    ???????????????????\\??????????????±??????????????????????I
*/