Nu aveti permisiuni pentru a descarca fisierul grader_test3.ok
Cod sursa(job #3160400)
Utilizator | Data | 23 octombrie 2023 21:20:07 | |
---|---|---|---|
Problema | Multiplu | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.26 kb |
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("multiplu.in");
ofstream fout("multiplu.out");
const int Vmax = 2000005;
int a, b;
queue<int> Q;
vector<int> dist(Vmax, INT_MAX);
int cat[Vmax], jobDone;
int cmmmc(int a, int b){
int x = a;
int y = b;
while(x!=y){
if(x>y)
x-=y;
else
y-=x;
}
return (a*b)/x;
}
void bfs(int rez_cmmmc){
Q.push(1);
cat[1]=0;
dist[1]=0;
while(!Q.empty()){
if(jobDone)
break;
int rest_nod = Q.front();
Q.pop();
for(int i=0;i<2;i++){
int vec = (cat[rest_nod]*rez_cmmmc+rest_nod)*10+i;
int rest_vec = vec%rez_cmmmc;
cat[rest_vec] = vec/rez_cmmmc;
if(rest_nod==rest_vec)
continue;
if(rest_vec==0)
jobDone = vec;
else
if(dist[rest_vec]==INT_MAX){
dist[rest_vec]=dist[rest_nod]+1;
Q.push(rest_vec);
}
}
}
}
int main()
{
fin>>a>>b;
int rez_cmmmc;
rez_cmmmc = cmmmc(a, b);
bfs(rez_cmmmc);
fout<<jobDone;
return 0;
}