D. TediousLee (找规律、推导)

电玩女神 2021-07-17 02:28 575阅读 0赞

题目

一层层推导下去很容易发现规律,a[i]=2*a[i-2]+a[i-1],看下面这张图,标着的序号代表以这个顶点为根的整颗子树所对应的阶次。6由两个4一个5组成,5由两个3一个4组成。那涂色得到的答案不就是上方的公式吗?但答案去是不对的,这还忽略了一个claw树,当达到6阶层时按照如下涂红色的去取会发现还多了一个claw,就是最上面的那个4个点,那么我们现在只要找到什么时候还要给答案加一个claw即可,当我们要求第i阶层时会发现只有当i-1 与 i-2最上面的点都是不取时可以多构成一个claw,然后相应的第i第阶层最上面的点变成取用状态,那我们只需额外去记录前两个的阶层最上面点是空还是不空的状态不断推导即可,为了方便直接开一个数组0代表空着4代表已取用。
在这里插入图片描述Code:

  1. #include<iostream>
  2. #include<cmath>
  3. #include<iomanip>
  4. #include<algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. const int Max = 2e6 + 5;
  8. const ll Mod = 1e9 + 7;
  9. ll ans[Max] = { 0,0,0,4,4};
  10. int d[Max] = { 0,0,0,1,0,0 };
  11. int main()
  12. {
  13. for (int i = 5;i <= Max-1;i++)
  14. {
  15. ans[i] = ans[i - 2] * ll(2) + ans[i - 1];
  16. if (d[i - 1] == 0 && d[i - 2] == 0)d[i] += 4;
  17. ans[i] += d[i];
  18. ans[i] %= Mod;
  19. }
  20. int t;cin >> t;
  21. while (t--)
  22. {
  23. int n;cin >> n;
  24. cout << ans[n] << endl;
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,575人围观)

还没有评论,来说两句吧...

相关阅读

    相关 292. Nim 游戏【规律

    你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石

    相关 蓝桥杯—规律

    2014年第五届第1题 标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料