P15529 [ROIR 2015 Day 2] tiling 铺砖

题目描述

在实验室信息技术部的修理过程中,工人们需要更换走廊中受损的地板砖,走廊的尺寸是 $2 \times n$ 米。工人们有无限供应的两种尺寸的砖:$1 \times 2$ 米和 $1 \times 1$ 米砖。此外,$1 \times 2$ 米的砖可以旋转 $90$ 度使用,可以沿走廊方向或垂直放置。 工人们已经开始修理,并在某些地方铺设了 $k$ 块 $1 \times 1$ 米的砖。为了完成修理,项目经理需要准备后续工作的计划。他想知道,有多少种方法可以铺设剩余的位置。这个数字需要模 $10^9 + 7$ 计算。 **任务**:编写一个程序,给定走廊的长度 $n$ 和已铺设的砖的位置,确定剩余砖铺设的方式数,并输出结果。

输入格式

输入文件的第一行包含两个整数:$n$ —— 走廊的长度,$k$ —— 已铺设 $1 \times 1$ 砖的数量($1 \leq n \leq 100,000$,$0 \leq k < 2n$)。接下来的 $k$ 行包含两个整数 $x_i$ 和 $y_i$,表示第 $i$ 块砖铺设在走廊的第 $x_i$ 米,第 $y_i$ 行($1 \leq x_i \leq n$,$1 \leq y_i \leq 2$)。

输出格式

输出文件应该包含一个整数 —— 走廊剩余砖铺设的方式数,结果对 $10^9 + 7$ 取模。

说明/提示

![](https://cdn.luogu.com.cn/upload/image_hosting/pc6wup1i.png) 图 1. 第一个例子中的所有瓷砖安装方法。 ![](https://cdn.luogu.com.cn/upload/image_hosting/okggrvwf.png) 图 2. 第三个例子中所有的瓷砖安装方法。 已铺设的瓷砖用灰色标记。 ### 评分系统与子任务描述 #### 子任务 1(20 分) * $1 \leq n \leq 8$,$k = 0$ * 若所有测试都通过,才能得分。 #### 子任务 2(20 分) * $1 \leq n \leq 1000$,$k = 0$ * 若所有测试都通过,才能得分。 #### 子任务 3(20 分) * $1 \leq n \leq 100,000$,$k = 0$ * 若所有测试都通过,才能得分。 #### 子任务 4(40 分) * $1 \leq n \leq 100,000$,$1 \leq k \leq 2n$ * 该子任务有 $20$ 个测试,每个测试得分为 $2$ 分,每个测试独立评分。 翻译来源:GPT 5.2。