首页 > 其他分享 >[蓝桥杯 2022 省 B] 积木画

[蓝桥杯 2022 省 B] 积木画

时间:2022-11-08 20:37:23浏览次数:67  
标签:状态 画布 积木 int 蓝桥 2022 本题

[蓝桥杯 2022 省 B] 积木画

题目描述

小明最近迷上了积木画,有这么两种类型的积木,分别为 \(I\) 型(大小为 \(2\) 个单位面积) 和 \(L\) 型 (大小为 \(3\) 个单位面积):

I 型积木L 型积木

同时,小明有一块面积大小为 \(2 \times N\) 的画布,画布由 \(2 \times N\) 个 \(1 \times 1\) 区域构成。小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式? 积木可以任意旋转,且画布的方向固定。

输入格式

输入一个整数 \(N\),表示画布大小。

输出格式

输出一个整数表示答案。由于答案可能很大,所以输出其对 \(1000000007\)(即 \(10^9+7\))取模后的值。

样例 #1

样例输入 #1

3

样例输出 #1

5

提示

【样例说明】

五种情况如下图所示, 颜色只是为了标识不同的积木:

【评测用例规模与约定】

对于所有测试用例,\(1 \leq N \leq 10^7\)。

蓝桥杯 2022 省赛 B 组 G 题。

状态的分析以及状态存储的优化方式

本题类似 Acwing291. 蒙德里安的梦想 故因此可以想到应该用二维的状态表示,状态f[i, j]表示为在放好前i列时,第i + 1列的状态为j,状态表示的属性时方法数,因此本题的答案就是f[n,0]。但是本题与蒙德里安不同的地方在于,本题是2 × N的棋盘,有2种积木并且N最大为107,由于对于每一列来说,只有三种情况,第一种是该列的0个格子被填充,第二种是该列的1个格子被填充,第三种是该列的2个格子被填充。

因为三种状态分别对应0个、1个、2个格子被填充,所以我们可以用0、1、2分别分别去对应这三种状态。

由于本题的N比较大,如果去开一个N × 3的数组有可能导致有的测试点Memory Limit Exceeded,所以我们应该去优化我们状态的存储。因为每一个状态只和它的前一个状态有关,所以我们可以用一个滚动数组f[2, 3]去存储我们的方法数。

注:图一的状态表示应该是在放好前i列时,第i + 1列的状态为j



#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7; // 答案可能非常大,所以题目要求取模
int n;
ll f[2][3]; // 答案可能非常大,亲测会爆int,所以开long long
int main()
{
    scanf("%d", &n);

    // 对初始状态进行初始化

    // 初始状态1:第一列竖着放一个的条形积木
    f[1][0] = 1;
    //初始状态2:第一列放一个L形状的积木,但是有正放和反放的区别
    f[1][1] = 2;
    //初始状态3:第一列横着放两个条形积木
    f[1][2] = 1;

    //状态计算
    for (int i = 2; i <= n; i ++ )
    {
        // 第一种情况:当前列竖着放一个长条与前一列以及满了
        f[i & 1][0] = (f[(i - 1) & 1][0] + f[(i - 1) & 1][2]) % MOD;
        // 第二种情况:当前列放一个L型(区分正反)与当前列被占了一格再横着放一个长条
        f[i & 1][1] = (f[(i - 1) & 1][0] * 2 + f[(i - 1) & 1][1]) % MOD;
        // 第三种情况:当前列横着放两个长条和一个L型的摆成7字形状
        f[i & 1][2] = (f[(i - 1) & 1][0] + f[(i - 1) & 1][1]) % MOD;
    }
    // 答案
    printf("%d", f[n & 1][0]);

    return 0;
}

来自wangbbb

标签:状态,画布,积木,int,蓝桥,2022,本题
From: https://www.cnblogs.com/vagrantx/p/16871069.html

相关文章

  • 【流水】2022.11.08
    今天有是信息课看python,孩子人傻了赶紧luogu上用python水了几道题。今天考试除了暴力分拿的十分健全就没啥优点了可怜紫飨被gank到三机房去了,可怜(悲听说要......
  • 2022.11.08 NOIP2022 模拟赛五
    「LibreOJNOIPRound#1」DNA序列注意到\(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有\(4^10\)种,可以直接压位存下来。时间复杂度\(O(nk)\)。Codeconstint......
  • 2022-11 学习计划
    2022-11学习计划技术redis源码基本类型aeNet集群技术实现调优和配置项分析分布式锁事务,内存,阻塞,发布,订阅redis+mysql双写一致性node源码......
  • NOIP2022游寄
    本文中部分人名使用mrfz的材料代替(与CSP游寄中不一定对应)11.7计算几何,教练连续讲了3hrs没有休息/jk晚上写了一会complex的板子。11.8上午写了个凸包。下午是线段树合......
  • 2022ICPC区域赛参后感悟
    第一次参加正式的大类赛事,在某种程度上挺激动的。我呢,可以说是刚步入竞赛一年,在此期间遇见了一些志同道合的朋友,最重要的是遇见了我的队友。开始前,我幻想过我们小队可以超......
  • 2022NOIPA层联测23
    C.作弊为了防止改不完题,这个神奇的东西我一定要现在就写!%%%Chen_jr 一看就知道我又鹤了设s(l,r)表示在[l,r]之间作一次弊的最大收益,这个东西居然可以优化!!转移方程......
  • (转)陆奇博士2022年度分享:前沿科技创新创业十大趋势(重磅完整版)
     https://mp.weixin.qq.com/s?__biz=MzA3NjAwOTk0NA==&mid=2650657441&idx=1&sn=e0b9365e66329d8e735605a511f46d9c&chksm=876eaa16b01923008d4a07156936a434bdd9a313330......
  • 2022河南萌新联赛第(一)场:ABDEFK
    https://ac.nowcoder.com/acm/contest/37160#questionanti-Nim游戏(反Nim游戏/反尼姆博弈问题)定义游戏规则与Nim类似,只是最后把石子取完的人输。结论先手必胜的条件为......
  • 20220920 14. 磁盘配额(Quota)与进阶文件系统管理
    14.1磁盘配额(Quota)的应用与实作14.1.1什么是Quota在Linux系统中,由于是多用户多任务的环境,所以会有多人共同使用一个硬盘空间的情况发生,因此管理员应该适当的限制......
  • [IJCAI 2022]Next Point-of-Interest Recommendation with Inferring Multi-step Futu
    [IJCAI2022]NextPoint-of-InterestRecommendationwithInferringMulti-stepFuturePreferences介绍文章做的问题是nextpoint-of-interst(POI)。以前的工作只考虑......