北航程序设计决赛(虽然。。。。但是)补题。

这篇博客主要介绍了北航程序设计竞赛中的多个题目,包括“浪哥的烦恼”、“前前前世”、“蚂蚁求偶”、“邋遢大王”等。每个题目都详细阐述了题目描述、输入输出格式以及解题思路。比如“浪哥的烦恼”是一个关于教室检查规律的问题,而“前前前世”则涉及到时间树和结点关系的计算。博客内容深入浅出,适合对算法和程序设计感兴趣的读者阅读。
摘要由CSDN通过智能技术生成

A 浪哥的烦恼

时间限制:1000ms   内存限制:131072kb

通过率:55/82 (67.07%)    正确率:55/254 (21.65%)

题目描述

最近学校大检查,要求上课认真听讲,这让浪哥很是烦恼,因为这样他就不能上课刷题了。但经过不懈的观察,他发现领导检查是有一定的规律的。不妨把每层楼的教室看成一排,从  1 1 到  n n 标号,领导每检查完一个教室,就会从相邻的一个或两个教室中选择一个继续检查,一个教室可能被检查不止一次。

已知时刻  0 0 领导在  1 1 号教室,从  i i 号教室走到  i+1 i+1 号教室需要  ti ti 时间,从  i+1 i+1 号教室走到  i i 号教室也需要  ti ti 时间  (i=1,2,,n1) (i=1,2,⋯,n−1),检查一个教室的时间极短可忽略不计,放学时刻为  m m 。

浪哥想要知道,放学之前(包括  m m )的哪些时刻,领导是不可能检查到他所在的  n n 号教室的。

输入

第一行包含一个正整数  T T ,表示有  T T 组测试数据。

接下来依次给出每组测试数据。对于每组测试数据:

第一行包含两个正整数  n n 和  m m

第二行包含  n1 n−1个正整数  t1,t2,,tn1 t1,t2,⋯,tn−1

1T200,2n100,1m500,1tim 1≤T≤200,2≤n≤100,1≤m≤500,1≤ti≤m

输出

对于每组数据输出一行,包含一些正整数,按升序给出,表示  n n 号教室不可能被检查的时刻。

对于本题,输出中在一行的每个整数之间用恰好一个空格隔开,不能有其他额外空格。

输入样例

1
3 10
2 3

输出样例

1 2 3 4 6 7 8 10

样例解释

在放学前,领导有两种不同的检查方式会检查到 3 号教室,分别是 1 -> 2 -> 3 和 1 -> 2 -> 1 -> 2 -> 3 ,其中到达 3 号教室的时刻分别为 5 和 9 。

北航解题思路:

有 1 到 n 共 n 个点
在 i 到 i + 1 之间移动需要 ti 时间
问从 1 出发走到 n 的耗时不超过 m 的情况下,不可能是哪
些时长
1 ≤ T ≤ 200,2 ≤ n ≤ 100,1 ≤ m ≤ 500;

令 f(i,j) 表示能否恰好用 i 时间走到 j
f(i,j) → f(i + tj,j + 1) if j < n f(i,j) → f(i + tj−1,j −1) if j > 1 从 f(0,1) 开始扩展,以广度优先搜索 (BFS) 的形式实现,时
间复杂度 O(nm);

B 前前前世

时间限制:2000ms   内存限制:131072kb

通过率:5/7 (71.43%)    正确率:5/26 (19.23%)

题目描述

taki—— 和 mitsuha——三叶 分别位于时间树两个结点。

世界的开端只有一个结点,但是由于在不同时刻采取不同的行动,会引起世界线变动,从而分裂为两个后续状态。因此我们用二叉树来描述整个世界时间分支,称之为时间树——一棵无穷大的二叉树。 taki 和 mitsuha 的故事开启于时间树的某一个结点  p p ,所以两人存在于以  p p 为根结点的时间树子树之中。 mitsuha 在一个较早的时间结点, taki 在相对较后的时间结点,具体来说,他们相差 3 年。

时间树结点的编号从 1 开始,按照层数,层内从左到右编码。如:

         1
    2          3
 4    5     6     7
8 9 10 11 12 13 14 15

换句话说,这棵树的第  i i 层有  2i1 2i−1 个结点  (i=1,2,3,) (i=1,2,3,⋯) ,而对于每个编号为  j j 的结点,它的两个孩子结点的编号分别是  2j 2j 和  2j+1 2j+1,它的父结点(如果存在)的编号为  j2 ⌊j2⌋ 。

古老的传说启示:如果两个人位于时间树的两个不同的结点,且一个结点是另一个结点的前前前结点(父结点的父结点的父结点),且满足两个点的编号模  k k 意义下均与  1 1 同余,命运的结绳(产灵,Musubi)将连接两人,在日落时分,彼此思念的两人能够穿越时间树相见。

只考虑结点  p p 开始的  n n 层时间树子树(即作为第 1 层结点的  p p 与其他的层数不超过  n n 且是  p p 的间接子结点的结点组成的树),那么有多少种不同的可能,满足 taki 能与 mitsuha 相见?即 taki 所在结点的前前前结点是 mitsuha 所在结点。

由于答案可能很大,你只需要给出答案对  109+7 109+7 取模的值。

输入

第一行包含一个正整数  T T ,表示有  T T 组测试数据。

接下来依次给出每组测试数据。对于每组测试数据:

仅一行,包含三个整数  k,n k,n 和  p p ,表示传说中的值,以及时间子树的层数限制、子树根结点编号。

1T<1000,2n<50000,1<k<1018,1p<1018 1≤T<1000,2≤n<50000,1<k<1018,1≤p<1018

输出

对于每组数据输出一行,包含一个整数,表示答案对  109+7 109+7 取模的值。

输入样例

3
7 4 1
5 4 1
8 5 4

输出样例

2
1
1

样例解释

前两个样例均以整个时间树的 1 号结点作为子树根结点。

对于 4 层  k=7 k=7 的情况,仅存在两种可能 (1,8) 和 (1,15) 满足传说启示。

对于 4 层  k=5 k=5 的情况,仅存在一种可能 (1,11) 满足传说启示。

第三个样例以 4 为子树根结点,子树层数为 5 , k=8 k=8 ,仅存在一种可能 (9,73) 满足传说启示。

北航解题思路:

给出一棵无穷结点的二叉树,根节点为 1 ,并且
对于结点 i ,它的两个子结点分别是 2i 和 2i + 1
在结点 p 的前 n 层子树中寻找两个结点 x 和 y ,满足 y 是 x 的子结点的子结点的子结点,且 x ≡ y ≡ 1 (mod k) 问可能的二元组 (x,y) 的数目模 109 + 7 的值
1 ≤ T < 1000,2 ≤ n < 50000,1 < k < 1018,1 ≤ p < 1018;

由祖先关系可知 y = 8x + d,d ∈ [0,23)

 由同余关系可知 1 ≡ y ≡ 8x + d ≡ 8 + d (mod k) 

当 k ≥ 15 时, 8 ≤ 8 + d ≤ 15 ,无解;

令 fk(i,j) 表示长度为 2i 且最小数字模 k 意义下为 j 的整数
区间里模 k 意义下为 1 的数字个数
fk(0,1) = 1,fk(0,j) = 0 (0 ≤ j < k,j 6= 1) fk(i,j) = fk(i−1,j) + fk(i−1,(j + 2i−1) mod k) 对于每个 k 可以 O(kn) 预处理,然后 O(n) 回答询问
预处理的复杂度为 O(k2n) ,预处理前缀和后可以 O(1) 回答;

C 蚂蚁求偶

时间限制:5000ms   内存限制:131072kb

通过率:57/76 (75.00%)    正确率:57/260 (21.92%)

题目描述

今年情人节, Dshawn 给喜欢的妹子送了一只笔筒并开玩笑说“人吃藕就要多学习”。妹子十分感动然后拒绝了他。

Image of pencase

这天闷得发慌的 DShawn 看着笔筒,发现笔筒的内壁有一只蚂蚁,外壁也有一只蚂蚁。内壁里面那只蚂蚁好像约了外壁的那只蚂蚁,正在以最短的距离向外壁的蚂蚁爬行。我们可以将蚂蚁认为是质点,笔筒的厚度忽略不计。因为笔筒底部有水,蚂蚁不愿意碰到笔筒底部!

Dshawn 就静静地看着小蚂蚁爬行,你知道小蚂蚁要爬多远吗?

为了方便计算,我们把笔筒的底面圆心放在原点,竖直放置笔筒。

输入

第一行包含一个正整数  T T ,表示有 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值