1 solutions
-
0
首先分类讨论。
如果 ,枚举每个第一类好数,找到第一个 的God数。
如果 ,注意这 个数不一定连续(其实只要明白这一点就可以了),只需要枚举与其他不同的那个数位的位置,并枚举与其他不同的那个数位的数字与其他的数位的数字,并不断更新答案,就能得到解(说白了就是枚举每个第二类God数)。
#include<bits/stdc++.h> using namespace std;//代码里用A代表与其他不同的那个数位,X代表除A外其他的数位 int ws(long long x){//求x的位数 int k=0; for(;x;x/=10)k++; return k; } int main(){ int k,t;long long x;bool flag;//定义变量(不开long long见祖宗) cin>>x>>k;t=ws(x);//下面是重点 if(k==0){//分类讨论1 for(int X=1;X<=9;X++){//枚举X long long now=0;//now代表当前正在枚举的好数 for(int i=1;i<=t;i++)now=now*10+X;//求出这个好数 if(now>=x){//如果好数不小于输入的数 cout<<now; return 0;//输出并结束 } } }else{//分类讨论2 long long ans=1e17;//ans代表所有now中的最优解(由于要求min请开1e17) for(int X=0;X<=9;X++) for(int A=0;A<=9;A++) for(int k=1;k<=t;k++){ if(X==0&&k!=1)continue; if(A==0&&k==1)continue;//排除有前导0的数 long long now=0;//now代表当前正在枚举的好数 for(int i=1;i<k;i++)now=now*10+X;//加上A的位置的前面的数位 now=now*10+A;//加上A的数位 for(int i=k+1;i<=t;i++)now=now*10+X;//加上A的位置的后面的数位 if(now>=x)ans=min(ans,now);//计算最优解 } cout<<ans; return 0;//输出并结束 } }
- 1
Information
- ID
- 617
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 77
- Accepted
- 2
- Uploaded By