Number Transformation II CodeForces

来源:互联网 发布:js 正则匹配数字 编辑:程序博客网 时间:2024/05/22 17:02

题意:求最小步骤从A到B;每一次操作可-1或者a-a%(xi);
贪心,每次都减去最大的;
然后发现暴力肯定会TLE
所以用set存储x数组,直接去重加排序;然后每次操作之后,选择不合法的删去

#include<bits/stdc++.h>using namespace std;#define maxn 111111set<int> st1,st2;int main(){    int n,a,b,x,ans=0;    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%d",&x);        st1.insert(x);    }    scanf("%d%d",&a,&b);    while(a>b)    {        set<int>::iterator it;        int aa=a-1;        for(it=st1.begin();it!=st1.end();it++)            if(a-a%(*it)>=b)            {                aa=min(a-a%(*it),aa);                st2.insert(*it);            }        ans++;        a=aa;        st1.clear();        st1=st2;        st2.clear();    }    printf("%d\n",ans);}