fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Узел. Используется в очереди
  5. struct node {
  6. bool val; // Значение узла
  7. node *next; // Указатель на следующий узел
  8. node(int v, node *n = NULL) {
  9. val = v;
  10. next = n;
  11. }
  12. };
  13.  
  14. // Очередь. Используется как представление стопки
  15. struct Queue {
  16. node *head;
  17. Queue(node *h = NULL) {
  18. head = h;
  19. }
  20. void push(bool v) { // Добавить элемент в очередь
  21. head = new node(v, head);
  22. }
  23. bool pop() { // Изъять элемент из очереди
  24. if(head != NULL && (head -> next) != NULL) {
  25. node *i = head;
  26. node *p = i;
  27. while(i -> next != NULL) {
  28. p = i;
  29. i = i -> next;
  30. }
  31. bool v = i -> val;
  32. p -> next = NULL;
  33. delete i;
  34. return v;
  35. } else {
  36. node *n = head;
  37. bool v = head -> val;
  38. head = head -> next;
  39. delete n;
  40. return v;
  41. }
  42. }
  43. };
  44.  
  45. int main() {
  46. int n; // Количество карточек в стопке
  47. cin >> n;
  48. Queue cards;
  49. bool t = n % 2; // Цвет текущей карточки. Инициализируется цветом последней выкладываемой карточки
  50. for(int i = 0; i < n - 1; i++) { // Собираем стопку, не добавляя верхнюю карточку
  51. cards.push(t); // Добавляем текущую карточку
  52. cards.push(cards.pop()); // Перекладываем карточку из-под стопки наверх
  53. t = !t; // Меняем цвет текущей карточки
  54. }
  55. cards.push(1); // Добавляем белую карточку наверх
  56. for(int i = 0; i < n; i++) // Выводим полученную стопку
  57. cout << cards.pop();
  58. return 0;
  59. }
Success #stdin #stdout 0s 3464KB
stdin
20
stdout
00111001101100010011