P9766 [ROIR 2021 Day 2] 好数 题解
P9766 [ROIR 2021 Day 2] 好数 题解
思路
先考虑第一类好数,直接从
再考虑第二类好数,因为最多只有
代码
#include<bits/stdc++.h>
using namespace std;
string s;
long long ans=1e17;
long long k,a[20],given;
long long Min(long long a,long long b){
return a<b?a:b;
}
int main(){
cin>>s>>k;
for(int i=0;i<s.size();i++){
given*=10;
given+=s[i]-'0';
}//记录原数
if(k==0){
for(int i=9;i>=1;i--){//从大到小枚举
long long now=0;
for(int j=0;j<s.size();j++){
now*=10;
now+=i;
}
if(now>=given){//更新答案
ans=now;
}
}
}else{
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=1;k<=s.size();k++){//枚举不变的位置
long long now=0;
if(i==0&&k==1)continue;//去掉前导0
for(int a=1;a<=k-1;a++){
now*=10;
now+=j;
}
now*=10;
now+=i;
for(int a=k+1;a<=s.size();a++){
now*=10;
now+=j;
}
if(now>=given)ans=Min(ans,now);//更新答案
}
}
}
}
cout<<ans;//输出
return 0;
}