CF550C题解

原题传送门
一道模拟题。

前置芝士(写给小学生看的)

结论

8 的整除特征:若末三位为 8 的倍数,则整个数为 8 的倍数。

推导

\(n\)\(\geq1000\) 的整数。

\(n = 1000a+b\)

\(\because n\equiv1000a+b\pmod{8 } \ \texttt{且} \ 8\mid 1000a\)

$ \therefore n\equiv b \pmod{8} $

思路

根据结论,我们可以打表出一个数组 mult8,表示字符串下8的倍数。

for(int i=0;i<1000;i+=8){
   cout<<'"'<<i<<'"'<<",";
}

mult8 数组:

const string mult8[]={"0","8","16","24","32","40","48","56","64","72","80","88","96","104","112","120","128","136","144","152","160","168","176","184","192","200","208","216","224","232","240","248","256","264","272","280","288","296","304","312","320","328","336","344","352","360","368","376","384","392","400","408","416","424","432","440","448","456","464","472","480","488","496","504","512","520","528","536","544","552","560","568","576","584","592","600","608","616","624","632","640","648","656","664","672","680","688","696","704","712","720","728","736","744","752","760","768","776","784","792","800","808","816","824","832","840","848","856","864","872","880","888","896","904","912","920","928","936","944","952","960","968","976","984","992"};

然后,从数组头循环到数组末。

for(int i=0;i<len;i++){
//......
}

循环里面分情况讨论,如果数组第 i 位是一位数,就循环一遍,搜索是否有它。

if(k.length()==1){
	for(int j=0;j<lens;j++){
		if(str[j]==k[0]){
			cout<<"Yes"<<endl;
			cout<<k;
			return 0;
		}
	}
}

如果是两位数就写二重循环,逐位判断是否有它。

if(k.length()==2){
	for(int j=0;j<lens;j++){
		if(str[j]==k[0]){
			for(int q=j+1;q<lens;q++){
				if(str[q]==k[1]){
					cout<<"Yes"<<endl;
					cout<<k;
					return 0;
				}
			}
		}
	}
}

如果是三位数就用三重循环,逐位判断是否有它。

if(k.length()==2){
	for(int j=0;j<lens;j++){
		if(str[j]==k[0]){
			for(int q=j+1;q<lens;q++){
				if(str[q]==k[1]){
					for(int t=q+1;t<lens;t++){
						if(str[t]==k[2]){
							cout<<"Yes"<<endl;
							cout<<k;
							return 0;
						}
					}
				}
			}
		}
	}
}

(注:上述 k 是 str[i])

由于前面输出过 Yes 之后 return 0 了,最后只要输出 No 就行了。

时间复杂度:\(\mathcal O (n^3m)\)。(n是字符串长度,m是 mult8 长度即125)考虑最坏情况 \(n^3m = 100^3 \times 125 = 1.25 \times 10^8\),不会 TLE。

AC记录

本题完。

posted @ 2021-07-28 20:27  WiccldCute  阅读(79)  评论(0)    收藏  举报