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;
}

浙公网安备 33010602011771号