CF1277A题解

这道题算是一道水题。

思路

我们可以先用类似于 BFS 的方法预处理出所有的美丽数(亲测耗时 0.031s)然后便利整个美丽数的数组,就能求出 \(\le\) n 的所有美丽数个数,输出即可。

细节

关于这个的 BFS ,我们需要首先把所有一位数压到队列里,然后,不断地取出 \(front\),由于美丽数每一位都要相等所以直接再压入 \(front \times 10 + front \bmod 10\)

注意,当只有 \(0 \le front \le 10^9\) 时以上过程才会进行,否则,弹出 \(front\) 即可。

code

#include <iostream>
#include <queue>
using namespace std;
vector<int> a;
#define int long long
void prebfs(){//预处理
    queue<int> q;
    for(int i=0;i<10;i++){
        q.push(i);
    }
    while(!q.empty()){
        int x=q.front();
        q.pop();
        if(x>(int)1e9)continue;
        a.push_back(x);
        if(x*10+x%10){
            q.push(x*10+x%10);
        }

    }
}
signed main()
{
    prebfs();
    int t;
    cin>>t;//测试数据数量
    while(t--){
        int n;
        cin>>n;
        int ans=0;
        for(int i=0;i<a.size()&&n>=a[i];i++){
                ans=i;
        }//判断<=n的美丽数个数
        cout<<ans<<endl;//输出
    }
    return 0;
}

posted @ 2021-08-11 12:00  WiccldCute  阅读(98)  评论(0)    收藏  举报