C/C++

Прошу помогите, C++ Задача

На столе у большого начальника лежит стопка из N заявлений, пронумерованных сверху вниз от 1 до N.
Первое заявление он подписывает и убирает из стопки, второе – выбрасывает в мусорную корзину, третье – кладёт вниз стопки. Далее процесс продолжается аналогично, пока заявления в стопке не закончатся.
Определите, будет ли заявление с номером K подписано или выброшено, а также номер шага, на котором это произойдёт. Одним шагом является каждая из трёх операций, описанных выше.

Формат входных данных

Первая строка входных данных содержит целое число N, вторая строка – целое число K (1 ≤ N ≤ 109, 1 ≤ K ≤ N).

Формат выходных данных

В первой строке выведите «Yes», если заявление с номером K будет подписано, и «No», если оно будет выброшено.

Во второй строке выведите номер шага, на котором это произойдёт.
Sashok Yashenko
Sashok Yashenko
83
В Питоне это было бы так:
 n, k = map(int, map(input, ('',) * 2))
rs, r, steps = list(range(1, n + 1)), 2, 0
while r == 2:
p = rs.index(k)
r = p % 3
l = len(rs) - len(rs) % 3
steps += l if r == 2 else p + 1
rs = rs[l:] + rs[2::3]
print(('Yes', 'No')[r], steps, sep = '\n)
А в Сиплюхплюх придётся выполнять закат Солнца вручную. Например, так:
 #include 
#include

using namespace std;

int main() {
unsigned n, k;
cin >> n >> k;
unsigned *rs = new unsigned[n];
unsigned rl = n;
for (size_t i = 0; i < n; i++)
rs[i] = i + 1;

unsigned r = 2, steps = 0;
while (r == 2) {
const auto p = find(rs, rs + rl, k) - rs;
r = p % 3;
const unsigned l = rl - rl % 3;
steps += r == 2 ? l : p + 1;
if (rl > l) rs[0] = rs[l];
if (rl > l + 1) rs[1] = rs[l + 1];
size_t j = rl - l;
for (size_t i = 2; i < l; i += 3, j++)
rs[j] = rs[i];
rl = j;
}
delete rs;

const char MSG[][4] = { "Yes", "No" };
cout
Николай Юрченко
Николай Юрченко
87 571
Лучший ответ
Артём Ефименков первое не верно, а второе частично верно, но все равно спасибо