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截获了中二科学家伦太郎发往过去的一条短 信,并由此 ...
随机推荐
- 浅谈分布式任务调度系统Celery的设计与实现
Celery是一个简单.灵活且可靠的分布式任务队列,它支持任务的异步执行.进度监控.重试机制等功能. Celery的核心组件包括: Broker:消息中间件,如RabbitMQ.用于任务的发布和订阅. ...
- #容斥,广搜#nssl 1458 HR的疑惑 nssl 1460 逛机房
nssl 1458 HR的疑惑 题目 求\([1\sim n]\)中有多少个正整数\(x\)满足 \[\sqrt[y]{x}\in N^{+},y>1 \] 其中\(n\leq 10^{18}\ ...
- HTTP协议安全头部的笔记
本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 近日项目组对当前开发.维护的Web系统做了AppScan扫描,扫描的结 ...
- Pandas高级教程之:Dataframe的重排和旋转
目录 简介 使用Pivot 使用Stack 使用melt 使用Pivot tables 使用crosstab get_dummies 简介 使用Pandas的pivot方法可以将DF进行旋转变换,本文 ...
- OpenHarmony携千行百业创新成果亮相HDC.Together 2023
8月4日-6日,华为开发者大会2023(以下简称"大会")在中国松山湖举办,OpenAtom OpenHarmony(简称"OpenHarmony")隆重参会 ...
- C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++ 字符串 字符串用于存储文本. 一个字符串变量包含由双引号括起来的一组字符: 示例 创建一个 string 类型的变量并为其赋值: string greeting = "Hello&q ...
- Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析
嵌入式服务器 Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中.这使得开发.测试和部署 Web ...
- 鸿蒙HarmonyOS实战-ArkUI组件(Menu)
一.Menu组件 Menu组件是一种常见的用户界面(UI)控件,用于在移动应用程序中显示可选项列表.它通常由一系列链接或按钮组成,以帮助用户导航和选择所需的操作.Menu组件可以在水平或垂直方向上呈现 ...
- [CentOS]压缩+解压+打包命令大全
[CentOS]压缩+解压+打包命令大全 --------------- .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注 ...
- centos 6.4下fdisk分区、格式化、挂载新硬盘
centos 6.4下fdisk分区.格式化.挂载新硬盘 作者: cat 日期: 2013 年 9 月 10 日 发表评论 (0) 查看评论 1.# fdisk -l 查看当前磁盘信息,就会发现最下面 ...

