Codeforces Round #652 (Div. 2)D. TediousLee 推导
题意:
Rooted Dead Bush (RDB) of level 1是只有一个点,如下图

当(RDB) of level i变成(RDB) of level i+1的时候,每一个顶点要进行下面的变化:
1、如果一个节点只有一个子节点,那么就再给这个节点添加两个子节点
2、如果一个节点没有子节点,那么就给这个节点添加一个子节点
3、如果一个节点有三个子节点,那么就不用管它
你需要从(RDB) of level i中找到有多少爪,爪的结构如下

最后因为我们求的是要给多少爪的节点染色,因为一个爪有四个节点,所以最后答案就是爪的个数乘于4(注意,爪与爪之间不能有重叠节点)


对于(RDB) of level 3只有一个爪就是(1,3,2,4);对于(RDB) of level 4种有两个爪(1,3,2,4)和(2,7,5,6)但是两个爪有重叠部分,所以只能算作一个
题解:
衍生的过程是具有重复性的,最终变化的是根结点 1 下的三棵子树,左右两棵子树为 leveln-2,中间的子树为 leveln-1 。
因为 level1 和 level2 的根结点并未使用,所以可以在 level3 中选择以根结点 1 为中心的爪形结构。
同理,level4、level5 可以通过选取较下层的爪形结构来避免根结点的使用,所以在 level6 中又可以选取以根结点 1 为中心的爪形结构。
即,level为 3 的倍数的图形都可以再额外选取位于根结点的爪形结构。
dp[i]=2*dp[i-2]+dp[i-1]+(i%3==0)*4
代码:
1 #include<iostream>
2 using namespace std;
3 #define ll long long
4 const int maxn =( 2 * 1e6)+10;
5 const int mod = 1e9 + 7;
6 ll dp[maxn], i, t, n;
7
8 void solve()
9 {
10 dp[0] = 0;
11 dp[1] = 0;
12 dp[2] = 0;
13 for (int i = 3; i <maxn; i++)
14 {
15 dp[i] = (dp[i - 1] + 2 * dp[i - 2])%mod;
16 if (i % 3 == 0)
17 {
18 dp[i] += 4;
19 dp[i] %= mod;
20 }
21 }
22 }
23 int main()
24 {
25 solve();
26 int t;
27 cin >> t;
28 while (t--)
29 {
30 int n;
31 cin >> n;
32 cout << dp[n] << endl;
33 }
34 }
Codeforces Round #652 (Div. 2)D. TediousLee 推导的更多相关文章
- Codeforces Round #652 (Div. 2) D. TediousLee(dp)
题目链接:https://codeforces.com/contest/1369/problem/D 题意 最初有一个结点,衍生规则如下: 如果结点 $u$ 没有子结点,添加 $1$ 个子结点 如果结 ...
- Codeforces Round #652 (Div. 2) E. DeadLee(贪心)
题目链接:https://codeforces.com/contest/1369/problem/E 题意 Lee 有 $n$ 种不同种类的食物和 $m$ 个朋友,每种食物有 $w_i$ 个,每个朋友 ...
- Codeforces Round #652 (Div. 2) C. RationalLee(贪心)
题目链接:https://codeforces.com/contest/1369/problem/C 题意 将 $n$ 个数分给 $k$ 个人,每个人分 $w_i$ 个数($\sum_{i = 1}^ ...
- Codeforces Round #652 (Div. 2) B. AccurateLee(字符串)
题目链接:https://codeforces.com/contest/1369/problem/B 题意 给出一个长 $n$ 的 二进制串,每次可以选择字符串中的一个 $10$,然后删除其中的一个字 ...
- Codeforces Round #652 (Div. 2) A. FashionabLee(几何)
题目链接:https://codeforces.com/contest/1369/problem/A 题意 判断正 $n$ 边形能否通过旋转使得一边与 $x$ 轴平行,一边与 $y$ 轴平行. 题解 ...
- Codeforces Round #652 (Div. 2) 总结
A:问正n边形的一条边和x轴平行的时候有没有一条边和y轴重合,直接判断n是否是4的倍数 #include <iostream> #include <cstdio> #inclu ...
- Codeforces Round #652 (Div. 2) B. AccurateLee(思维)
题意: 给你一个01字符串,现在你可以删除其中的一些子序列,要求如下:当遇到1 0的俩个连续子字符串后,可以删除其中的一个字符,现在要求把他删到尽量最短并且字典序最小,输出最后的字符串 题解: 刚开始 ...
- Codeforces Round #652 (Div. 2) C. RationalLee 贪心
题意: t组输入,你有n个数,还有k个朋友,每一个朋友需要wi个数.意思就是你要给第i个朋友分配wi个数,输入保证w1+w2+...+wk=n 一个朋友的兴奋值是你分配给他的数中最大值加上最小值的和( ...
- Codeforces Round #652 (Div. 2) E. DeadLee 贪心
题意: 派会上有n种食物,每种食物有wi份.有m个朋友,每一个朋友有两种他喜欢吃的食物xi,yi.你需要判断他的朋友是否都能吃到食物.如果都能吃到食物,那么要输出朋友来的顺序,不能的话输出" ...
随机推荐
- Linux学习笔记 | 常见错误之VMware启动linux后一直黑屏
方法1: 宿主机(windows)管理员模式运行cmd 输入netsh winsock reset 然后重启电脑 netsh winsock reset命令,作用是重置 Winsock 目录.如果一台 ...
- 终于可以愉快的撸Java异步代码了!
异步响应式编程可以极大的提高系统的并发呑吐量,但由于Java没有类似于其他语言的Async/Await机制,所以只能通过CompletableFuture.thenXXX()来串联各个异步任务,这 ...
- Linux监控工具vmstat命令
当linux服务器的发生告警,我们要查看当前系统的状态值,包括CPU使用率,内存使用情况,虚拟内存交换情况,IO读写情况等. top与vmstat这两个监控工具都满足要求,当然top还可以看到各个进程 ...
- 【Spring】创建一个Spring的入门程序
3.创建一个Spring的入门程序 简单记录 - Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)- Spring的基本应用 Spring与Spring MVC的 ...
- 构造无字母数字Webshell
异或: 补充: A的ascii为65,对应二进制是01000001 <?php echo "1"^"A"; ?> 将"A"和&q ...
- Databricks 第8篇:把Azure Data Lake Storage Gen2 (ADLS Gen 2)挂载到DBFS
DBFS使用dbutils实现存储服务的装载(mount.挂载),用户可以把Azure Data Lake Storage Gen2和Azure Blob Storage 账户装载到DBFS中.mou ...
- 并发编程常用工具类(一) countDownLatch和cyclicBarrier的使用对比
1.CountDownLatch countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始 ...
- vue-router实现路由懒加载( 动态加载路由 )
三种方式第一种:vue异步组件技术 ==== 异步加载,vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件.第二种:路由懒加载 ...
- JPEG解码——(3)文件头解析
与具体的编码数据空间相比,jpeg文件头占据非常小乃至可以忽略不计的大小. 仍然拿JPEG解码--(1)JPEG文件格式概览中的<animal park>这张图片来举例,从跳过SOS(FF ...
- RocketMQ 的几个简单问题与答案
1 单机版消息中心 一个消息中心,最基本的需要支持多生产者.多消费者,例如下: class Scratch { public static void main(String[] args) { // ...