Codeforces 347E - Number Transformation II

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1s4z5/article/details/52981744

给出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;
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页