注:Index数☞由4,7组成的十进制数。

T1.全排列(permutation)

    求n个数的第k个排列中,有多少个Index位置上是Index数。

由于k的范围比较小,n的范围比较大(都是109),所以从k入手,发现只要对后13位进行考虑即可(12!<109<13!)。

由于数字可能很大,所以对后13位数据缩小处理(1~13,之后变回来就好了)。这道题就变成了13个数的第k个排列问题。这个康托逆展开还是比较好写的(别忘了k- -再处理)。然后对后13位统计index 个数,加上预处理的n-13的个数(二分找很快的),就是答案。

 

 

T2.线段(segment)

给出n条线段(左右端点),可移动k次,一次一个单位,求最多能被所有线段覆盖的Index点个数。

(全部输出1有55分?Horrible!)

首先覆盖的Index数都是连续的。所以考虑把区间[l,r]变为合法区间的代价。然而值可能很大,所以利用浮点数即可。

 

T3.集合(sets)

给出n个数分成k个集合,且k个集合之间交集为空。

显然每个元素不能同时放在k个集合中,所以每个元素有2k-1种放法,所以答案为(2k-1)n,快速幂对1e9+7取模即可。

posted on 2016-11-17 15:13  啊?  阅读(132)  评论(0编辑  收藏  举报