思路:暴力肯定会超时。开一个二维数组f[1000][2],用f[i][0]表示前i位中含偶数个3的个数,f[i][1]表示前i位中含奇数个3的个数。 注意到首位的时候要去掉前导0的情况。
#include<bits/stdc++.h>
using namespace std
;
int main()
{
int n
,f
[1001][2];cin
>>n
;
f
[1][0]=8;f
[1][1]=1;
for(int i
=2;i
<=n
;i
++)
{
int tmp
=9;
if(i
==n
)tmp
--;
f
[i
][0]=(f
[i
-1][0]*9+f
[i
-1][1])%12345;
f
[i
][1]=(f
[i
-1][1]*9+f
[i
-1][0])%12345;
}
cout
<<f
[n
][0]<<endl
;
return 0;
}