20231112多校模拟T2

这篇具有很好参考价值的文章主要介绍了20231112多校模拟T2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

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

后三种形状纯粹是出题人的恶趣味,d用没有

做法一:暴力

不会

做法二:递推

定义:

  • f[i] 为填满 \(i*2\) 的方格的方案数
  • g[i] 为填满 \(i*2\) 的方格 不能被腰斩 的方案数

解释:例如当 \(n = 4\) 时,下列第一种画法能被腰斩,第二种不能
20231112多校模拟T2

初步分析

很容易得到, 当 \(i\) 为奇数时 答案答案显然为0

\[f[0] = 1, g[0] = 1, f[2] = 1, g[2] = 1, f[4] = 4, g[4] = 3 \]

当i为大于4的偶数时

\[f[i] = g[i] * f[0] + g[i - 2] * f[2] + g[i - 4] * f[4] + ... + g[2] * f[i - 2] \]

进一步发现

\[g[i] = 2 \]

解释:上下两端用第3, 第4种方块, 中间用2填满
20231112多校模拟T2

然后可以得到递推式

\[f[i] = 2 * (f[0] + f[2] + f[4] + ... f[i - 6]) + 3 * f[i - 4] + f[i - 2] \]

前面一部分可用前缀和优化一下变为:

\[f[i] = 2 * (sum[i - 6]) + 3 * f[i - 4] + f[i - 2] \]

发现奇数项根本没有用,优化一下空间

\[f[i] = 2 * (sum[i - 3]) + 3 * f[i - 2] + f[i - 1] \]

此时答案为 \(f[\dfrac{n}{2}]\)

进一步优化

\(O(n)\) 做法跑 \(10^{18}\) 肯定会爆,考虑上述式子用矩阵乘法优化

\[\left[ \begin{matrix} 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项的平方
我太弱了不会推文章来源地址https://www.toymoban.com/news/detail-750456.html

到了这里,关于20231112多校模拟T2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PMP课堂模拟题目及解析(第14期)

    131. 项目经理正在制定干系人参与计划,并识别到一位权力等级较高但在项目中兴趣较低的干系人,项目经理应该如何对待该干系人? A. 重点管理 B. 随时告知 C. 监督 D. 令其满意 132. 项目经理识别到项目干系人具有明显不同的需求和期望。为确保项目成功,项目经理应该怎么

    2024年02月07日
    浏览(45)
  • PMP课堂模拟题目及解析(第5期)

    41. 项目的混凝土供应商通知项目经理,材料将比预定时间晚三个星期交付。项 目经理更新了进度计划并通知项目团队。在这种情况下,哪种合同类型承担的风 险最小? A. 总价加激励费用合同。 B. 总价加经济价格调整合同。 C. 工料合同。 D. 固定总价合同。 42. 一个国际项目

    2024年02月03日
    浏览(38)
  • PMP课堂模拟题目及解析(第15期)

    141. 在新项目的干系人会议中,项目经理发现一名干系人对项目有抵触。项目经理记录这个问题,并对该干系人的参与程度评级。项目经理使用了哪项工具或技术来为干系人的参与程度评级? A. 干系人参与评估矩阵 B. 风险概率和影响评估 C. 人际关系技巧 D. 专家判断 142. 由于

    2024年02月07日
    浏览(60)
  • 【算法】算法(模拟、指针等)解决字符串类题目(C++)

    字符串题目有很多种,这里筛选几个考察模拟、双指针等的题目,并用相关算法解决。 思路 题意分析 :题目要求找到字符串数组中的最长公共前缀。 解法一 : 两两比较 遍历数组,每次比较后更新最长公共前缀,并循环比较找最长公共前缀 解法二 : 统一比较 遍历第一个

    2024年01月16日
    浏览(46)
  • 2022 第十四届蓝桥杯模拟赛第二期题目题解(比赛时使用方法)

    目录 第一题:最小的2022 第二题:经过天数 第三题:特殊的十六进制数 第四题:矩阵的最小路径 第五题:质数拆分 第六题:拷贝时间 第七题:单词去重 第八题:最短回文串 第九题:多少个X? 第十题:最小交换 问题描述 请找到一个大于 2022 的最小数,这个数转换成二进

    2023年04月11日
    浏览(73)
  • 【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴 们点赞、关注! class   Solution :      def   findContentChildren ( self ,  g :  List [ int ],  s

    2024年02月04日
    浏览(56)
  • 多校联测11 THUSC

    题目大意 有 n n n 个人参加 T H U S C THUSC T H U SC ,第 i i i 个人算法场和工程场的成绩分别为 a i a_i a i ​ 和 b i b_i b i ​ ,保证不存在两个人两项成绩都相同。 现在招办想给他们排个名。一个合理的排名方案是分别给算法场和工程场一个正的权重 x , y x,y x , y ,然后按照 a i x

    2024年02月07日
    浏览(32)
  • HDU 多校第 8 场比赛记录

    Round 8 : (2023.08.10) 近 11:30 才意识到多校,买了麦当劳后匆匆返回,结果还第一个到。 开题。 开10,设差为 x x x ,根据平方差得到 x x x 为奇数情况的答案=2,加一可得偶数,故偶数情况=3,然后分析偶数,由 ( p + n ) 2 − ( p − n ) 2 = 4 p n (p+n)^2-(p-n)^2=4pn ( p + n ) 2 − ( p − n ) 2

    2024年02月13日
    浏览(42)
  • 详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读

    最近博主一直再刷Leetcode上有关c语言的题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所给的函数里的参数的具体含义我既然都不知道是什么意思。当然在请教了一些大佬后我也顺利解决了,不然也不会有人和你们分享了,哈哈哈~ 我就已一个典型的题目来介绍

    2024年02月08日
    浏览(46)
  • 【树链+EXGCD】杭电多校第一场 A

    1001 Hide-And-Seek Game (hdu.edu.cn) 题意: 给定一棵树和两条路径,每条路径都有起点和终点,起始时起点有人,每隔一秒都会往终点走一步,会从起点走向终点再会起点这样不断地周期性地走,让你求一点,使得两个人能在这点相遇且花的时间最少   思路: 首先答案一定是两条路

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包