Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

RGB7703 - Хоёр товчлуур

Вася нэгэн сонин төхөөрөмж олж гэнэ. Төхөөрөмжийн урд хэсэгт улаан болон цэнхэр хоёр товчлуур байх ба дэлгэцэн дээр ямар нэгэн бүхэл тоог харуулна. Улаан товчлуурыг дарвал дэлгэцэн дээрх тоо хоёр дахин ихэснэ. Цэнхэр товчлуурыг дарвал дэлгэцэн дээрх тоо нэгээр хорогдоно. Дэлгэцэн дээрх тоо сөрөг болбол төхөөрөмж эвдэрнэ. Дэлгэц ямар ч том тоог гаргаж чадна. Анх дэлгэцэн дээр n гэсэн тоо байсан.

Боб дэлгэцэн дээр m гэсэн тоог гаргахыг хүсчээ. Түүний тулд хамгийн багадаа хэдэн удаа товчлууруудыг дарах хэрэгтэй вэ?

Оролт

Оролтын эхний мөрөнд n болон m (1 ≤ n, m ≤ 104)гэсэн ялгаатай бүхэл тоонууд зайгаар тусгаарлагдан өгөгдөнө.

Гаралт

Хамгийн багадаа хэдэн удаа товчлууруудыг даран n тоог m болгож болохыг хэвлэ.

Жишээ 

Оролт 1 :

4 6

Гаралт 1 :

2

Оролт 2 :

10 1

Гаралт 2 :

9

 

Тайлбар

 Эхний жишээнд цэнхэр товчлуурыг нэг удаа даран, улаан товчлуурыг 1 удаа дарна.

Хоёр дахь жишээнд тоог хоёр дахин нэмэгдүүлэх шаардлагагүй тул цэнхэр товчлуурыг есөн удаа дарна.

 

Орчуулсан : Б.Даваабаяр

 


Нэмсэн:Bataa
Огноо:2013-02-07
Хугацааны хязгаарлалт:1s
Эх кодын хэмжээний хязгаарлалт:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Програмчлалын хэлүүд:ADA95 ASM32 BASH BF C NCSHARP CSHARP C++ 4.3.2 CPP C99 CLPS LISP sbcl LISP clisp D ERL FORTRAN HASK ICON ICK JAVA JS-RHINO JULIA LUA NEM NICE OCAML PAS-GPC PAS-FPC PERL PHP PIKE PRLG-swi PYTHON PYPY3 PYTHON3 RUBY SCALA SCM guile ST TCL WHITESPACE
Эх сурвалж:Codeforces Round #295 (Div. 2)

hide comments
2019-04-03 04:44:07
#include <queue>
#include <iostream>
#include <stack>
using namespace std;
queue <long long> q;
bool used[1000001]={false};
long long n , m, i, d[1000001]={0};
int main()
{
cin>>n>>m;
q.push(n);
used[n]=true;
while(!q.empty())
{
i=q.front();
q.pop();
if (!used[i*2]&& i*2<=m*2)
{
used[i*2]=true;
q.push(i*2);
d[i*2]=d[i]+1;
}
if(!used[i-1]&& i-1>=0)
{
used[i-1]=true;
q.push(i-1);
d[i-1]=d[i]+1;
}
if(used[m]==true)
{ break; }
}
cout<<d[m];
}
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.