Codeforces 347E - Number Transformation II

来源:互联网 发布:日本杀人知乎 编辑:程序博客网 时间:2024/05/18 03:35

给出n个数字xi,两个整数A,B(AB106)

每一步可以做两个操作其中一个

1 将A变成A1

2 将A变成 AA(modx1)

问将A变成B的最小步数。


每次贪心的找到能减到的最小的大于等于BA即可。

如果一个AA(modxi)<B ,那就可以将这个xi删掉。

#include<bits/stdc++.h>using namespace std;set<int> S;int main(){    int a,b,n;    int x;    scanf("%d",&n);    while(n--){        scanf("%d",&x);        S.insert(x);    }    scanf("%d %d",&a,&b);    int tim = 0;    while(a != b){        int mi = a - 1;        for(set<int>::iterator it = S.begin();it != S.end(); ){            int x = *it;            it++;            if(a - a % x < b) S.erase(x);            else mi = min(mi,a - a % x);        }        a = mi;        tim++;    }    printf("%d\n",tim);    return 0;}
0 0
原创粉丝点击