第十二届北航程序设计竞赛决赛网络同步赛 B题 前前前世(数论推导 + DP)
题目链接 2016 BUAA-Final Problem B
考虑一对可行的点$(x, y)$
根据题意,设$x = ak + 1,y = bk + 1$
又因为$x$是$y$的祖先的祖先的祖先,所以$y = 8x + d, 0 <= d <= 7$;
那么代入到之前的那个式子
$y = 8x + d$
$= 8(ak + 1) + d = 8ak + d + 8$
注意到$8ak$对$k$取模后值为$0$,那么如果要满足题意,$d + 8$对$k$取模后值必须为$1$。
又因为$0 <= d <= 7$,所以$8 <= d + 8 <= 15$。
由此发现,当$k >= 15$时,无论$d$在取值范围内取什么值,都满足不了这个条件。
那么$k >= 15$时我们直接判无解。
根据同余的性质我们发现只需要关心根结点对$k$取模之后的值就行,
那么设$f[i][j][k]$为考虑根结点编号对$k$取模为$j$,模数为$k$,树的高度为$i$的时候这棵树的符合题意的点对数。
转移的时候从两个儿子那里获取信息,再加上自己的后代的后代的后代中符合题意的点的个数(前提是自己的编号对$k$取模也得为$1$)
那么状态数有$k^{2}n$个,用记忆化搜索实现就好了。
时间复杂度$O(k^{2}n)$
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL; const int N = 5e4 + 10; const LL mod = 1e9 + 7; LL k, p;
LL f[N][16][16];
LL c[20][20];
int T;
int n; LL dp(int i, int j, int k){
if (~f[i][j][k]) return f[i][j][k];
if (i <= 3) return f[i][j][k] = 0; LL ret = 0;
ret += dp(i - 1, 2 * j % k, k); ret %= mod;
ret += dp(i - 1, (2 * j + 1) % k, k); ret %= mod;
if (j % k == 1){
ret += c[8 * j % k][k];
ret %= mod;
} return f[i][j][k] = ret;
} int main(){ memset(f, -1, sizeof f); rep(i, 0, 15){
rep(k, 1, 15){
rep(j, i, i + 7){
if (j % k == 1){
++c[i][k];
}
}
}
} scanf("%d", &T);
while (T--){
scanf("%lld%d%lld", &k, &n, &p);
if (k >= 15){
puts("0");
continue;
} p %= k;
printf("%lld\n", dp((int)n, (int)p, (int)k));
} return 0;
}
第十二届北航程序设计竞赛决赛网络同步赛 B题 前前前世(数论推导 + DP)的更多相关文章
- 第十二届北航程序设计竞赛决赛网络同步赛 J题 两点之间
题目链接 Problem J 这道题思路还是很直观的,但是有两个难点: 1.题目中说$1<=NM<=10^{6}$,但没具体说明$N$和$M$的值,也就是可能出现: $N = 1, M ...
- 第十三届北航程序设计竞赛决赛网络同步赛 B题 校赛签到(建树 + 打标记)
题目链接 校赛签到 对每个操作之间建立关系. 比较正常的是前$3$种操作,若第$i$个操作属于前$3$种,那么就从操作$i-1$向$i$连一条有向边. 比较特殊的是第$4$种操作,若第$i$个操作属 ...
- A. Srdce and Triangle--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
如下图这是“今日头条杯”首届湖北省大学程序设计竞赛的第一题,作为赛后补题 题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 Let be a regualr tr ...
- “今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛 )--E. DoveCCL and Resistance
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 链接:https://www.nowcoder.com/acm/contest/104/D来源:牛客网 题目描述 ...
- I. Five Day Couple--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 链接:https://www.nowcoder.com/acm/contest/104/H来源:牛客网 题目描述 ...
- D. Who killed Cock Robin--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 由于系统限制,C题无法在此评测,此题为现场赛的D题 Who killed Cock Robin? I, ...
- H. GSS and Simple Math Problem--“今日头条杯”首届湖北省大学程序设计竞赛(网络同步赛)
题目描述:链接点此 这套题的github地址(里面包含了数据,题解,现场排名):点此 题目描述 Given n positive integers , your task is to calculat ...
- 北京师范大学第十六届程序设计竞赛决赛 I 如何办好比赛
链接:https://www.nowcoder.com/acm/contest/117/I来源:牛客网 如何办好比赛 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 北京师范大学第十六届程序设计竞赛决赛-重现赛-B题
一.题目链接 https://www.nowcoder.com/acm/contest/117/B 二.题意 给定一组序列$a_1,a_2,\cdots,a_n$,表示初始序列$b_1,b_2,\cd ...
随机推荐
- 《Cracking the Coding Interview》——第17章:普通题——题目3
2014-04-28 22:18 题目:计算N的阶乘尾巴上有多少个零? 解法:计算5的个数即可,因为2 * 5 = 10,2的个数肯定比5多.计算5的个数可以在对数时间内搞定. 代码: // 17.3 ...
- Jmeter 场景设计
今天的业务场景是: 1.管理员登录后台---登录成功后添加一个某类型的产品---产品添加成功后,再为该产品添加10个排期. 2.管理员登录后台--登录成功后添加多个不同类型产品---产品全部添加完成后 ...
- 生成器 yield, next ,send
重要的yield :相当于一个断层,我们再用next取拿出每一层重要的next :生成器查看装置,查看每一个断层重要的send :和next一样查看每一个段层,不过在查看第二个断层的时候,就可以对前面 ...
- python-线程进程与队列
线程,有时被称为轻量级进程,是程序执行流的最小单元线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指进行中的程序的调度单位.在单个程序中 ...
- hp raid json
hp机器均已在装OS之前划好raid,统一规格为2*480G SSD, 12*4T SATA ,2*1.6T SSD,其中2*480G SSD做系统盘,划分raid1 已知disk controlle ...
- 线段树(单点更新,区间查询) HDU 1754 I Hate It
题目链接 线段树的模板 #include<iostream> #include<cstdio> #include<cmath> #include<algori ...
- hnust py road
问题 C: Py Road 时间限制: 1 Sec 内存限制: 128 MB提交: 125 解决: 34[提交][状态][讨论版] 题目描述 Life is short,you need Pyth ...
- php天龙八部
<?php /* 一.操作步骤: 连接MySQL数据库 判断是否连接成功 选择数据库 设置字符集 准备SQL语句 向MySQL服务发送SQL语句 解析处理结果集 释放结果集,关闭数据库连接 */ ...
- git使用及一些配置、问题
安装https://git-for-windows.github.io/ 一.绑定用户名.邮件地址 git config --global user.name "Your Name" ...
- HDU 3033 组合背包变形 I love sneakers!
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...