F1 - Nearest Beautiful Number (easy version)(预处理)
Posted zjj0624
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了F1 - Nearest Beautiful Number (easy version)(预处理)相关的知识,希望对你有一定的参考价值。
题意
给你两个数n,k,让你找到大于等于n的最小的k-beautiful数。
k-beautiful数就是数字的种类数小于等于k的数。
n的范围是1<=n<=1e9.
k的范围是1<=k<=2.
举个例子 比如 177890 2,得到的最小的2-beautiful是181111.
思路
刚开始的时候k=1的时候很简单,就直接模拟就可以了,但是当k=2的时候,刚开始我也想直接模拟,可是发现总会少考虑情况,最后看了题解发现我们可以把所有的1-beautiful数和2-beautiful都直接预处理出来,存起来。
代码
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define per(a,b,c) for(int a=b;a>=c;--a)
const int N = 1e7 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
ll ans[N];
int cnt;
void init()
{
unordered_map<ll,bool>mp;
for(int i=0 ; i<=9 ; i++)
{
for(int j=0 ; j<=9 ; j++)
{
for(int len=1 ; len<=9 ; len++)
{
for(int k=0 ; k<(1<<len) ; k++)
{
int sum=0;
int cc=1;
for(int z=0 ; z<len ; z++)
{
if(k&(1<<z)) sum+=i*cc;
else sum+=j*cc;
cc*=10;
}
if(!mp[sum])
{
ans[++cnt]=sum;
mp[sum]=true;
}
}
}
}
}
}
int main()
{
init();
sort(ans+1,ans+1+cnt);
int t;
cin>>t;
while(t--)
{
int c[20];
int n,k;
cin>>n>>k;
if(n==1000000000&&k==2)
{
cout<<"1000000000"<<endl;
continue;
}
int x=n;
int len=0;
while(x)
{
c[++len]=(x%10);
x/=10;
}
reverse(c+1,c+1+len);
if(k==1)
{
for(int i=1 ; i<=9 ; i++)
{
bool flag=true;
for(int j=1 ; j<=len ; j++)
{
if(c[j]>i)
{
flag=false;
break;
}
else if(i>c[j])
{
flag=true;
break;
}
}
if(flag) for(int j=1 ; j<=len ; j++) cout<<i;
if(flag) cout<<endl;
if(flag) break;
}
}
else
{
int cc=lower_bound(ans+1,ans+1+cnt,n)-ans;
cout<<ans[cc]<<endl;
}
}
return 0;
}
以上是关于F1 - Nearest Beautiful Number (easy version)(预处理)的主要内容,如果未能解决你的问题,请参考以下文章
F1 - Nearest Beautiful Number (easy version)(预处理)
F1 - Nearest Beautiful Number (easy version)(预处理)
Codeforces Round #739 (Div. 3) F1. Nearest Beautiful Number (easy version)
Codeforces Round #739 (Div. 3) F1. Nearest Beautiful Number (easy version)
F2. Nearest Beautiful Number (hard version) (贪心)
#739 (Div. 3) 1560. F2. Nearest Beautiful Number (hard version)[数位dp+二分]