Игра в Девятку II (Codeforces 1769D2)
Tags: Others, *special

В этой версии задачи игроки начинают играть не только на победу, но и на оптимизацию результата игры для них. Вводится понятие величины важности первого хода, и нужно найти $$$13$$$ раскладов с различными значениями этой величины.Алиса и Боб решили сыграть в карточную игру «Девятка». Пожалуйста, внимательно прочитайте условие задачи, поскольку правила могут отличаться от известных вам.Для игры нужна стандартная колода из $$$36$$$ карт — по девять карт (от шестёрки до туза) каждой из четырёх мастей (трефы, бубны, пики и черви). Карты по достоинству от младшей к старшей идут следующим образом: шестёрка, семёрка, восьмёрка, девятка, десятка, валет, дама, король, туз.Перед игрой колода перемешивается, и каждому игроку раздаётся по $$$18$$$ карт. Карты нужно выкладывать из руки на стол по определённым правилам. Выигрывает игрок, который первым выложит все карты из своей руки.Игроки ходят по очереди. Ход игрока имеет один из следующих видов:   выложить на стол из своей руки девятку любой масти;  выложить на стол шестёрку, семёрку или восьмёрку любой масти, если на столе уже лежит карта той же масти достоинством на единицу выше;  выложить на стол десятку, валета, даму, короля или туза любой масти, если на столе уже лежит карта той же масти достоинством на единицу ниже. Например, девятку пик можно выложить на стол в любой момент, для выкладывания семёрки треф необходимо наличие на столе восьмёрки треф, а для выкладывания туза червей необходимо наличие на столе короля червей.Если игрок не может выложить на стол ни одну карту из своей руки, то ход переходит к сопернику. Обратите внимание: нельзя пропустить ход просто так — всегда необходимо выложить карту на стол корректным образом, если это возможно.Помимо того, что каждый игрок стремится избавиться от карт в своей руке, Алиса и Боб также хотят, чтобы в конце игры в руке у их соперника карт осталось как можно больше, а в их руке — как можно меньше. Напомним, что игра заканчивается, как только один из игроков выкладывает на стол последнюю карту из своей руки.Результатом игры назовём совокупность из информации о том, кто из двух игроков выиграет при оптимальной игре, а также о том, сколько карт останется в руке у проигравшего.Пусть Алиса и Боб уже взяли в руки свои $$$18$$$ карт каждый, но ещё не решили, кто из них будет ходить первым. Величиной важности первого хода для данного расклада назовём абсолютную разность между результатами игры в случае, если первой будет ходить Алиса, и в случае, если первым будет ходить Боб.Например, если в обоих случаях выиграет Боб, но в одном случае у Алисы останется $$$6$$$ карт в руке в конце игры, а во втором — всего $$$2$$$, то величина важности первого хода равна $$$4$$$. Если же в одном случае выиграет Алиса и у Боба останется $$$5$$$ карт в руке, а во втором случае выиграет Боб и у Алисы останется $$$3$$$ карты в руке, то величина важности первого хода равна $$$8$$$.Ребята хотят узнать, насколько разной бывает величина важности первого хода для разных раскладов. По заданному числу $$$k \le 13$$$ помогите им найти такие $$$k$$$ раскладов, что величины важности первого хода для всех них — различные целые числа.

Input: В единственной строке задано целое число $$$k$$$ ($$$2 \le k \le 13$$$) — число необходимых раскладов.В задаче два теста. В первом тесте $$$k = 2$$$, во втором тесте $$$k = 13$$$.

Output: Выведите $$$k$$$ пар строк. Каждая пара строк должна соответствовать некоторому раскладу. Величины важности первого хода для всех выведенных раскладов должны быть различными целыми числами.В первой строке каждой пары выведите $$$18$$$ строк длины $$$2$$$ через пробел, описывающих карты Алисы в любом порядке. Первый символ строки должен обозначать достоинство карты — символ из набора 6, 7, 8, 9, T, J, Q, K, A, обозначающий шестёрку, семёрку, восьмёрку, девятку, десятку, валета, даму, короля и туза соответственно. Второй символ строки должен обозначать масть карты — символ из набора C, D, S, H, обозначающий трефы, бубны, пики и черви соответственно.Во второй строке выведите $$$18$$$ строк длины $$$2$$$ через пробел, описывающих карты Боба в том же формате.Каждая из $$$36$$$ возможных карт должна находиться в руке одного из двух игроков в единственном экземпляре.

Note: В первом выведенном раскладе все девятки находятся в руке у Алисы. Даже если Боб будет ходить первым, ему всё равно придётся пропустить первый же свой ход. Следовательно, первый ход при таком раскладе имеет важность $$$0$$$.Во втором выведенном раскладе вне зависимости от того, чьим будет первый ход, выиграет Алиса. Однако если Алиса будет ходить первой, то у Боба в конце игры в руке останется одна карта, а если же она будет ходить второй, то у Боба останется пять карт. Соответственно, величина важности первого хода при таком раскладе равна $$$4$$$.

Sample Inputs:
2

Sample Outputs:
KS QD 8D QC 8S 8C JD 9H AC TH 9S 9D QH 7H 8H TS 7S 9C
6D JS 7D KH QS TC AD AS KC 6C 7C TD AH KD 6S JC JH 6H

JC JS 8S TD JD KH 7D 9C KC TH QD 8D 7H TC KD 9H 8C 6D
7S AC QH AD 8H TS 6H JH 6C AH 7C 6S 9D QC AS QS KS 9S

Solution (Python):
a = '6C 7C 8C JC QC KC AC 8D TD 6S 8S AS 8H 9H TH JH QH AH\n9C TC 6D 7D 9D JD QD KD AD 7S 9S TS JS QS KS 6H 7H KH\n6C 7C 9C TC QC AC 6D 9D TD JD 9S KS AS 8H 9H TH QH AH\n8C JC KC 7D 8D QD KD AD 6S 7S 8S TS JS QS 6H 7H JH KH\n6C 7C KC AC 6D 7D 8D 9D TD JD QD 6S 7S 9S TS JS 6H AH\n8C 9C TC JC QC KD AD 8S QS KS AS 7H 8H 9H TH JH QH KH\n6C 9C KC 9D TD QD KD 7S 8S JS QS KS 6H 7H 8H TH JH KH\n7C 8C TC JC QC AC 6D 7D 8D JD AD 6S 9S TS AS 9H QH AH\n6C JC 6D 7D TD JD KD AD 7S 8S 9S TS JS AS 7H 8H 9H KH\n7C 8C 9C TC QC KC AC 8D 9D QD 6S QS KS 6H TH JH QH AH\n7C 8C 9C QC KC 7D 8D TD QD KD 8S JS QS AS 6H 9H KH AH\n6C TC JC AC 6D 9D JD AD 6S 7S 9S TS KS 7H 8H TH JH QH\n7C 8C TC KC 7D 9D JD KD AD 7S 9S TS KS 6H 7H TH JH QH\n6C 9C JC QC AC 6D 8D TD QD 6S 8S JS QS AS 8H 9H KH AH\n7C 9C JC QC 9D TD JD KD AD 6S 7S 9S JS QS KS 6H 7H TH\n6C 8C TC KC AC 6D 7D 8D QD 8S TS AS 8H 9H JH QH KH AH\n7C JC KC 8D 9D JD QD KD AD 6S 8S TS KS AS 6H 8H 9H TH\n6C 8C 9C TC QC AC 6D 7D TD 7S 9S JS QS 7H JH QH KH AH\n8C JC QC 6D 7D 8D JD QD KD AD 8S 9S 6H 7H 9H TH KH AH\n6C 7C 9C TC KC AC 9D TD 6S 7S TS JS QS KS AS 8H JH QH\n8C TC 6D 7D 9D TD JD 6S 7S 9S TS KS AS 7H JH QH KH AH\n6C 7C 9C JC QC KC AC 8D QD KD AD 8S JS QS 6H 8H 9H TH\n9C JC QC KC AC 7D 8D 9D TD JD KD 8S QS TH JH QH KH AH\n6C 7C 8C TC 6D QD AD 6S 7S 9S TS JS KS AS 6H 7H 8H 9H\n9C TC QC KC 7D 9D TD KD AD 6S 7S TS QS KS AS 6H 7H 9H\n6C 7C 8C JC AC 6D 8D JD QD 8S 9S JS 8H TH JH QH KH AH'.split('\n')
k = int(input())
print('\n'.join(a[:2 * k]))

Solution (Python):
a = '6C 7C 8C JC QC KC AC 8D TD 6S 8S AS 8H 9H TH JH QH AH\n9C TC 6D 7D 9D JD QD KD AD 7S 9S TS JS QS KS 6H 7H KH\n6C 7C 9C TC QC AC 6D 9D TD JD 9S KS AS 8H 9H TH QH AH\n8C JC KC 7D 8D QD KD AD 6S 7S 8S TS JS QS 6H 7H JH KH\n6C 7C KC AC 6D 7D 8D 9D TD JD QD 6S 7S 9S TS JS 6H AH\n8C 9C TC JC QC KD AD 8S QS KS AS 7H 8H 9H TH JH QH KH\n6C 9C KC 9D TD QD KD 7S 8S JS QS KS 6H 7H 8H TH JH KH\n7C 8C TC JC QC AC 6D 7D 8D JD AD 6S 9S TS AS 9H QH AH\n6C JC 6D 7D TD JD KD AD 7S 8S 9S TS JS AS 7H 8H 9H KH\n7C 8C 9C TC QC KC AC 8D 9D QD 6S QS KS 6H TH JH QH AH\n7C 8C 9C QC KC 7D 8D TD QD KD 8S JS QS AS 6H 9H KH AH\n6C TC JC AC 6D 9D JD AD 6S 7S 9S TS KS 7H 8H TH JH QH\n7C 8C TC KC 7D 9D JD KD AD 7S 9S TS KS 6H 7H TH JH QH\n6C 9C JC QC AC 6D 8D TD QD 6S 8S JS QS AS 8H 9H KH AH\n7C 9C JC QC 9D TD JD KD AD 6S 7S 9S JS QS KS 6H 7H TH\n6C 8C TC KC AC 6D 7D 8D QD 8S TS AS 8H 9H JH QH KH AH\n7C JC KC 8D 9D JD QD KD AD 6S 8S TS KS AS 6H 8H 9H TH\n6C 8C 9C TC QC AC 6D 7D TD 7S 9S JS QS 7H JH QH KH AH\n8C JC QC 6D 7D 8D JD QD KD AD 8S 9S 6H 7H 9H TH KH AH\n6C 7C 9C TC KC AC 9D TD 6S 7S TS JS QS KS AS 8H JH QH\n8C TC 6D 7D 9D TD JD 6S 7S 9S TS KS AS 7H JH QH KH AH\n6C 7C 9C JC QC KC AC 8D QD KD AD 8S JS QS 6H 8H 9H TH\n9C JC QC KC AC 7D 8D 9D TD JD KD 8S QS TH JH QH KH AH\n6C 7C 8C TC 6D QD AD 6S 7S 9S TS JS KS AS 6H 7H 8H 9H\n9C TC QC KC 7D 9D TD KD AD 6S 7S TS QS KS AS 6H 7H 9H\n6C 7C 8C JC AC 6D 8D JD QD 8S 9S JS 8H TH JH QH KH AH'.split('\n')
k = int(input())
print('\n'.join(a[:2 * k]))

Solution (Python):
s = 'AC 9H 7H JD 9D 7D AD 9S KH 7C 8D JS QH QD JC AH AS TS\n8C 8S QC TD 6S TH 6H 6C 6D TC KD 7S 9C KC JH KS 8H QS\nAS 8C 6S JC AH 7H QH KC 9D TC AD 9S JH 7D 9H 6C 6D JD\n8D 6H TS TD KD JS 8H 9C QS TH 7C KS AC 8S KH QC QD 7S\n9D 9S JH QD 8D QC JS KS TH KH TD 7D QS AD 7C TS QH KC\nJC AC 9H 6H 6C 7S 9C AH KD 6S 8C 6D AS TC 8H 8S 7H JD\n7D AD TD JH 9D 7S KD JS TC 6C AH 8C JD QD QC 6H KC 7H\n9S 7C 6D QH 8D TS 6S 9H TH KH AC 8H 8S JC AS KS 9C QS\n6C JS 9D QC JC QH KH TC 6H KS 8H 6D 8D TS AC 7D TD KC\n8C JD KD 6S 7S 9C JH TH AS 8S 7C AD 7H 9H 9S AH QS QD\nQH 7H QS 6D KC 6C QC 7D TS 6S TD 7S AS JH KD 9C 6H 9S\n8D 8C 9H KS AD 9D 8S AC 8H QD TC JD JC 7C TH KH JS AH\n6H QH 9H 9S AS TH 9C QC 8S 7D 6C 7C 8D QS 6D TS KC KH\nKS JD AD JC 7S JH JS TD KD 7H 8H 8C 9D 6S TC AH QD AC\n6D JC KS 8S KC 7C JD 8H JH 9D QD TS AD JS 9S 8C 6C AC\n7S 6S AH TH QC QS 9H 6H AS QH 7H 7D 9C TC 8D TD KD KH\nQS QH AS JD 8C 9S 7D 7C 9D 6H QC JH JC 8D 6C QD AC KC\n8S KD AH JS KS 6S KH 6D TC TH 7H 9C 8H AD 9H TS 7S TD\n7H 6C QS TD KD 9D 8C JC JH 7S TC 9H 6S 8S 6D 7C JS AH\nAS KS KC KH QH QC QD TS 6H TH 9C 9S AD JD 8H 8D 7D AC\nJD 8C 6S 8S QS 9H KD KH AS 7D QD AH QH TC 9C 6D 8H JH\nAD 7S 9S TH TD QC 8D 7H 9D TS AC KC 6C JS 7C JC KS 6H\n8H TD KH 9D 6C 6H TS JC 7S QH TC JS 6D 9H QC AC KC 7C\nJH QD AS 8C TH 8D AD 9C 9S 8S 7D AH 7H QS KD JD 6S KS\n7D 6D AD 8H 7S JS TS 9D JD 9H KD JC AC AS QS QD 8D QC\n9C 7H TH 6C 6S AH 9S 6H KC QH KH 7C 8C 8S TD TC JH KS'
s = s.splitlines()
n = int(input())
for i in range(n):
    print(s[2 * i])
    print(s[2 * i + 1])
    print()