题意简述
给一个集合$a$,大小为$n$。请你选出若干个数,按某种顺序排好,对于每个数(除了最后一个),它的下一个数要么是他两倍,要么是它$\dfrac{1}{3}$。你最多能从$a$选出多少个数满足这样的条件?
$n<=1e5$,$1<=a_i<=3e18$。
比如${4,8,16,12,24}$,最多就是选出$4$个数,按$12,24,8,16$的顺序排好。容易验证,这样是最长的。
具体思路
我们开一个$map$,记为$pos$。$pos[x]$表示$x$出现的位置。然后$i$向$pos[2\times a[i]]$和$pos[a[i]/3]$连边,如果$pos!=0$。这样我们就建好了一张后继图。图上任意一条路径,就是一个合法的选择方案。(显然)
然后我们讲一下为什么是$DAG$。我们走一条边,要么是乘2,要么是除3,而$2$和$3$是互质的,所以$\dfrac{2^x}{3^y}$不珂能是$1$。也就是说,一个点不会到自己。再换句话,图上没环。
然后就是实现方面的问题了。记得开$longlong$。
精髓总结
关键就是要想到图是个DAG!
代码
1 |
|