# 実装方針
## 問題
・2d + 1 個のブロックが直線上に並び
便宜上、中央のブロックを0 として、-d, -d + 1, ..., -1, 0, 1, ..., d - 1, d のようにブロックに番号が振られています。
・最初は、0 のブロックにうなぎが立っています。
・以下の操作をn 回繰り返します。
1. 画面に1 以上の整数a が表示されるので、右か左の同一方向に連続してa 個のブロック分だけうなぎを動かします。
2. -d のブロックからさらに左に進むか、もしくはd のブロックからさらに右に進むと、うなぎはブロックから落下し蒲焼きになります。
3. 蒲焼きになると強制的にゲームは終了し、あなたの負けです。
・上記操作のあと、うなぎが蒲焼きになっていなければあなたの勝ちです。
□ □ □ □ □ □ □ □ □ □ □ □ □ □
## アイデア
* 総当たり
* いったん総当たりで最適化する方向の方が良さそう。
* ~~右と左をみて、近い方に毎回移動する。落ちるなら遠い方に移動~~
* 遠い方で移動しても落ちるのであれば不可能
* これだと、うまく端に移動しないといけないパターンがあると失敗する
* きている数字を2グループに分け、その差分がブロックの数以下にすることが絶対条件
* その後、途中で落ちない組み合わせを探す
* 2グループに分けること自体相当時間がかかりそう。
### 総当たりコードの方針
N回
## 茶位メモ
### 方針
* 全ての操作に対して総当たりしたらできそう。
* 再起関数でできそう
### コード
``` python=
d, n = [int(n) for n in input().split()]
action_num_list = [int(input()) for _ in range(n)]
stage_start = 0
stage_end = 2*d
start_position = d
def optimize_lr(_position, _action_num_list, _action_lr_list) :
if _position < stage_start or _position > stage_end:
return
if len(_action_num_list) == 0 :
print(''.join(_action_lr_list))
exit()
_action_num = _action_num_list[0]
optimize_lr(_position+_action_num, _action_num_list[1:], _action_lr_list+['L']) # Lを選択
optimize_lr(_position-_action_num, _action_num_list[1:], _action_lr_list+['R']) # Rを選択
optimize_lr(start_position, action_num_list, [])
```
``` python=
d, n = [int(n) for n in input().split()]
action_num_list = [int(input()) for _ in range(n)]
stage_start = 0
stage_end = 2*d
start_position = d
def optimize_lr(_position, _action_num_list, _action_lr_list) :
if _position < stage_start or _position > stage_end:
return
if len(_action_num_list) == 0 :
print(''.join(_action_lr_list))
exit()
_action_num = _action_num_list[0]
if _position < d:
optimize_lr(_position+_action_num, _action_num_list[1:], _action_lr_list+['R']) # Rを選択
optimize_lr(_position-_action_num, _action_num_list[1:], _action_lr_list+['L']) # Lを選択
else:
optimize_lr(_position-_action_num, _action_num_list[1:], _action_lr_list+['L']) # Lを選択
optimize_lr(_position+_action_num, _action_num_list[1:], _action_lr_list+['R']) # Rを選択
optimize_lr(start_position, action_num_list, [])
```
## 柳田メモ
``` python=
```
## 尾崎メモ
``` perl=
for( my $i = 0; $i < 2; $i++ ){
if()
}
sub _move {
my
}
```
## あらたにメモ
---
## C#erメモ
ゲーム木作成
```csharp=
using System;
using System.Linq;
using System.Collections.Generic;
public class Pz{
// -1 : left
// 1 : right
public static int Range;
public static int[] result;
public static void Main(){
Range = int.Parse(Console.ReadLine());
var input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
var res = BruteForce(input, 0, new int[0]);
Console.WriteLine(string.Join(", ", result));
}
public static bool BruteForce(int[] command, int pos, int[] moved){
if (pos < -Range || pos > Range)
return false;
if (command.Length == 0)
return true;
if (BruteForce(command.Where((s, i) => i != 0).ToArray(), pos + command[0], moved.Concat(new int[]{ 1 }).ToArray())){
result = moved.Concat(new int[]{ 1 }).ToArray();
return true;
}
if (BruteForce(command.Where((s, i) => i != 0).ToArray(), pos - command[0], moved.Concat(new int[]{ -1 }).ToArray())){
result = moved.Concat(new int[]{ -1 }).ToArray();
return true;
}
return false;
}
}
// よし、わからん
/**
* 20
* 5 9 8 13 12 8 7 11 2 3 14 11 1 2 2 1 2 1 2 1 1 18
*/
```