20231112多校模拟T2
题目描述
给你下列7种形状,问恰好填满 \(n*2\) 的方格有多少种方案(每种形状可任意旋转)

后三种形状纯粹是出题人的恶趣味,d用没有
做法一:暴力
不会
做法二:递推
定义:
- f[i] 为填满 \(i*2\) 的方格的方案数
- g[i] 为填满 \(i*2\) 的方格 不能被腰斩 的方案数
解释:例如当 \(n = 4\) 时,下列第一种画法能被腰斩,第二种不能
初步分析
很容易得到, 当 \(i\) 为奇数时 答案答案显然为0
且
\]
当i为大于4的偶数时
\]
进一步发现
\]
解释:上下两端用第3, 第4种方块, 中间用2填满
然后可以得到递推式
\]
前面一部分可用前缀和优化一下变为:
\]
发现奇数项根本没有用,优化一下空间
\]
此时答案为 \(f[\dfrac{n}{2}]\)
进一步优化
\(O(n)\) 做法跑 \(10^{18}\) 肯定会爆,考虑上述式子用矩阵乘法优化
f[i] \\
f[i - 1] \\
sum[i - 2]
\end{matrix}
\right] =
\left[
\begin{matrix}
1 & 3 & 2\\
1 & 0 & 0\\
0 & 1 & 1
\end{matrix}
\right]
\left[
\begin{matrix}
f[i - 1] \\
f[i - 2] \\
sum[i - 3]
\end{matrix}
\right]
\]
至此,复杂度优化为\(O(logn)\)
AC代码
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
const ll P = 1e9 + 7, N = 2e6;
ll f[3] = {1, 1, 4};
ll sum[3] = {1, 2, 6};
ll n;
void mul(ll a[3][3], ll b[3][3]) {
ll c[3][3]; memset(c, 0, sizeof c);
for(int k = 0; k < 3; k ++) {
for(int i = 0; i < 3; ++ i)
for(int j = 0; j < 3; ++ j)
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % P;
}
memcpy(a, c, sizeof c);
}
ll q_pow(ll b) {
if(b < 3) return f[b];
ll ret[3][3] = {1, 0, 0, 0, 1, 0, 0, 0, 1};
ll a[3][3] = { 1, 3, 2, 1, 0, 0, 0, 1, 1};
++ b;
while(b) {
if(b & 1) mul(ret, a);
mul(a, a);
b >>= 1;
}
return ret[1][0];
}
int main() {
while(scanf("%lld", &n) != EOF) {
if(n & 1) puts("0");
else printf("%lld\n", q_pow(n / 2));
}
return 0;
}
其他做法
机房大佬说这题就是斐波那契第n项的平方
我太弱了不会推
20231112多校模拟T2的更多相关文章
- [NOIP2018校模拟赛]T2矩阵分组 Matrix
题目链接: 矩阵分组 分析: 这道题求的是两部分极差当中大的那个的最小值.对于这种求最值的问题,我们很自然(其实并没有)地想到二分答案. 这个题有两个结论: (好像当时看出来了第一个?然后发现下面都不 ...
- Day1:T1 模拟 T2 拓扑排序
T1:模拟 自己第一天的简直跟白痴一样啊...模拟都会打错.. 当时貌似在更新最大值的时候打逗比了... if((sum[x]==max && x<maxh) || sum[x] ...
- HDU5399-多校-模拟
Too Simple Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- NOIP2012 普及组真题 4.13校模拟
考试状态: 我今天抽签看了洛谷的… 这我能怂???凶中带吉,我怕考试??我!不!怕! 看着整个机房的男同学们,我明白我是不会触发我的忌了.很好,开刷. A. [NOIP2012普及组真题] 质因数分解 ...
- NOIP2019普及级别模拟 3.30校模拟
好吧我还是第一次写这种总结类的玩意… 考场心情…hmm…我没睡醒.是的是这样的,反正题都有两三个看错了或者没看懂… 最关键的是!!我!居!然!把!Freopen!写!在!了!程!序!最!后! 然后就和 ...
- [NOIP2018校模拟赛]T1 阶乘
题目: 描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p*q刚好为正整数m的阶乘,求m的最小值. 输入 共两行. 第一行一个正整数n. 第二行n个正整数a[i]. 输出 共 ...
- [NOIP2018校模拟赛]T1聚会 party
题目链接: 聚会 分析: 设每个点到1号点的距离为dist_{i},每个点的权值为x_{i},目标点到1号点的距离为dist,权值为x,那么对于每一次查询,我们讨论三种情况: ① 目标家庭在区间左边( ...
- 九校模拟——餐馆(restaurant)
1 餐馆(restaurant) 1.1 题目背景 铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加. 1.2 题目描述 共有n 种食材,一份食材i 需要花ti 小时不间断地进行播种,施肥 ...
- 7.12模拟T2(套路容斥+多项式求逆)
Description: \(n<=10,max(w)<=1e6\) 题解: 考虑暴力,相当于走多维格子图,不能走有些点. 套路就是设\(f[i]\)表示第一次走到i的方案数 \(f[i] ...
- 「题解」:07.16NOIP模拟T2:通讯
问题 B: 通讯 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 “这一切都是命运石之门的选择.” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此 ...
随机推荐
- C#通过文件头判断flv文件
代码如下: private void button1_Click(object sender, EventArgs e) { string path = Application.StartupPath ...
- 自建AXI4的IP核的地址问题
自建AXI4的IP核的地址问题 1.问题概述 在AXI4中,对应的操作通过对对应的寄存器设置来完成.其中的寄存器又分为数据寄存器和地址寄存器.其中,如果只是想要操作数据的话,只需要使用数据寄存器即可. ...
- Python BeautifulSoup 简单使用方法
- .net core ECDsa
ECDsa(Elliptic Curve Digital Signature Algorithm)是一种基于椭圆曲线密码学的数字签名算法.在.NET Core中,System.Security.Cry ...
- (建议收藏)OpenHarmony系统能力SystemCapability列表
SysCap,全称SystemCapability,即系统能力,指操作系统中每一个相对独立的特性. 开发者使用某个接口进行开发前,建议先阅读,了解Syscap的定义和使用指导.再结合下文中的表格判断具 ...
- 来自上个世纪的传奇 q_math.c 源码展示
经典的快速平方根倒数算法就在其中 此算法首先接收一个32位带符浮点数,然后将之作为一个32位整数看待,将其右移一次(取半),并用十六进制"魔术数字"0x5f3759df减之,如此即 ...
- ssm 创建bean的三种方式和spring依赖注入的三种方式
<!--创建bean的第一种方式:使用默认无参构造函数 在默认情况下: 它会根据默认无参构造函数来创建类对象.如果 bean 中没有默认无参构造函数,将会创建失败--> <bean ...
- 直播预告丨“Hello ArkUI:初识Slider组件(JS)”周三约起
12月1日 19:00-20:30,Hello HarmonyOS系列课程的第三节Hello ArkUI:初识Slider组件(JS)线上直播,将手把手教你熟悉最新的ArkUI,使用JS语言编写一个包 ...
- CentOS9 \ Centos8安装MySQL 8步骤
centos8 rpm 安装mysql8.0.28_太阳神LoveU的博客-CSDN博客 This upper link is still working for mysql 8 on the Cen ...
- redis 简单整理——Lua[十一]
前言 简单介绍一下Lua. 正文 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集 成Lua脚本来解决这个问题. 前面提及到pipline,也提及到pipline 并不是原子性的,如 ...

