CF146B Lucky Mask


这道题连我这个蒟蒻也觉得挺简单的。

注意寻找“面罩”时的细节。

前置芝士:

当你把一个数按数位拆分时(举 $114514$ 为例),就可以分成这样:

如果设当前位在数中为第 $n$ 个数。

那么当前拆分的这位数在原数中的值为:

当前数 $\times 10^{n-1}$

AC Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
inline int read(){
	int x=0;bool f=false;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') f=true;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^'0');c=getchar();}
	return f?-x:x;
}//快读。
inline int Pow(int a,int b){
	int ans=1;
	while(b!=0){
		if(b&1)ans*=a;
		a*=a;
		b>>=1;
	}
	return ans;
}//快速幂。 
signed main(){
	a=read();b=read();//输入。
	if(b>a){//特判。 
		cout<<b<<endl;//输出。
		return 0;//结束程序。
	}else{
		for(int i=1+a;;i++){//枚举比a大的数。 
			int p=i,q=0,cnt=0;//p为当前数(为了不改变i的值),q为“面具”数值,cnt为一共有多少位“面具”。
			while(p!=0){//每一位按照题目要求判断。 
				if(p%10==7){//当前位为7。
					q+=7*Pow(10,cnt);//“面具”数值增加(前置芝士里说了)。
					cnt++;//计数器+1。
				}
				if(p%10==4){//当前位为4。 
					q+=4*Pow(10,cnt);//“面具”数值增加(前置芝士里说了)。
					cnt++;//计数器+1。
				}
				p/=10;//下一位。 
			}
			if(q==b){//符合要求。
				cout<<i<<endl;//输出。
				return 0;//结束程序。
			}
		}
	}
	return 0;//完结撒花!
}

祝您早日AC!!!

^( ̄(oo) ̄)^


文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录