#include
#include
#include
using namespace std;
int main() {
size_t n, k, m = 0;
cin >> n >> k;
deque box(n);
iota(box.begin(), box.end(), 1);
while (!box.empty()) {
const auto front = box.front();
if (0 == ++m % 3) box.push_back(front);
else if (2 == m % 3);
else if (front == k) break;
box.pop_front();
}
puts(box.empty() ? "No" : "Yes");
cout << m << '\n';
}
Первое заявление он подписывает и убирает из стопки, второе – выбрасывает в мусорную корзину, третье – кладёт вниз стопки. Далее процесс продолжается аналогично, пока заявления в стопке не закончатся.
Определите, будет ли заявление с номером K подписано или выброшено, а также номер шага, на котором это произойдёт. Одним шагом является каждая из трёх операций, описанных выше.
Формат входных данных
Первая строка входных данных содержит целое число N, вторая строка – целое число K (1 ≤ N ≤ 109, 1 ≤ K ≤ N).
Формат выходных данных
В первой строке выведите «Yes», если заявление с номером K будет подписано, и «No», если оно будет выброшено.
Во второй строке выведите номер шага, на котором это произойдёт.