P1762偶数(题解)
Link.
PS.
此题关于杨辉三角,所以应该是数论。
但是像我这种菜鸡,只能暴力打表出奇迹了。
然后突然发现,好像自己打出了最短的题解。
Solution.
首先,对于$\texttt{n}$比较小的数据可以打出一个表。
打表辅助程序如下,相当于$\texttt{O(n}^\texttt{2}\texttt{)}$暴力解决1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using namespace std;
const int N=15;
int a[2][10005],ans[10005],tr[10005];
int main()
{
memset(a,0,sizeof(a)),tr[0]=tr[1]=0;
for(int i=0,tot=0;i<=N;i++,tot=0)
{
a[i&1][0]=1;
for(int j=1;j<=i;j++) a[i&1][j]=a[1-(i&1)][j]+a[1-(i&1)][j-1];
for(int j=0;j<=i;j++) a[i&1][j]&=1;
for(int j=0;j<=i;j++) tot+=1-(a[i&1][j]&1);
tr[i]=tr[i/2]+lowbit(i)/2,ans[i]=tot;
for(int j=0;j<=i;j++) printf("%c%c",a[i&1][j]?'*':'.',j==i?'\n':' ');
// printf("%d:%d\n",i+1,ans[i]);
}
return 0;
}
打出来的表如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16*
* *
* . *
* * * *
* . . . *
* * . . * *
* . * . * . *
* * * * * * * *
* . . . . . . . *
* * . . . . . . * *
* . * . . . . . * . *
* * * * . . . . * * * *
* . . . * . . . * . . . *
* * . . * * . . * * . . * *
* . * . * . * . * . * . * . *
* * * * * * * * * * * * * * * *
然后,发现它是一个分形图形,于是我们考虑用递归求解。
设我们当前要处理的三角形边长为$\texttt{n}$,答案为$\texttt{f(n)}$,那么
于是,这个$\texttt{f(n)}$可以用递归法加上快速幂求解。
当然也可以预处理出所有$\texttt{3}^\texttt{k}$。
Coding.
1 |
|