array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(9) "308660876" ["text"]=> string(45) "安全测试前置实践1-白盒&黑盒扫描" ["intro"]=> string(411) "本文我们将以围绕系统安全质量提升为目标,讲述在安全前置扫描上实践开展过程。希望通过此篇文章,帮助大家更深入、透彻地了解安全测试,能快速开展安全测试。 作者:京东物流 陈维 一、引言 G.J.Myers在《软件测试的艺术》中提出:从心理学角度来说,测试是一个为了寻找错误而运行程序的过程。 " ["username"]=> string(12) "jingdongkeji" ["tagsname"]=> string(39) "前端|安全|黑盒测试|白盒测试" ["tagsid"]=> string(29) "["160","2823","14120","5741"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1681206002" ["_id"]=> string(9) "308660876" } [1]=> array(10) { ["id"]=> string(9) "308660875" ["text"]=> string(24) "vulnhub靶场之ORASI: 1" ["intro"]=> string(256) "准备: 攻击机:虚拟机kali、本机win10。 靶机:Orasi: 1,下载地址:https://download.vulnhub.com/orasi/Orasi.ova,下载后直接vbox打开即可。 知识点:hex编码、ida逆向、AndroidKiller逆向、ffuf爆破、ssti漏洞、s" ["username"]=> string(6) "upfine" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1681204802" ["_id"]=> string(9) "308660875" } [2]=> array(10) { ["id"]=> string(9) "308660874" ["text"]=> string(92) "C# Kafka重置到最新的偏移量,即从指定的Partition订阅消息使用Assign方法" ["intro"]=> string(428) "在使用Kafka的过程中,消费者断掉之后,再次开始消费时,消费者会从断掉时的位置重新开始消费。 场景再现:比如昨天消费者晚上断掉了,今天上午我们会发现kafka消费的数据不是最新的,而是昨天晚上的数据,由于数据量比较多,也不会及时的消费到今天上午的数据,这个时候就需要我们对偏移量进行重置为最新的,以" ["username"]=> string(15) "Poetwithapistol" ["tagsname"]=> string(10) ".NET|Kafka" ["tagsid"]=> string(13) "["300","440"]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1681203303" ["_id"]=> string(9) "308660874" } [3]=> array(10) { ["id"]=> string(9) "308660873" ["text"]=> string(129) "迁移学习()《Attract, Perturb, and Explore: Learning a Feature Alignment Network for Semi-supervised Domain Adaptation》" ["intro"]=> string(194) "论文信息 论文标题:Attract, Perturb, and Explore: Learning a Feature Alignment Network for Semi-supervised Domain Adaptation论文作者:Taekyung Kim论文来源:2020 ECCV论文地" ["username"]=> string(12) "BlairGrowing" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1681203302" ["_id"]=> string(9) "308660873" } [4]=> array(10) { ["id"]=> string(9) "308660872" ["text"]=> string(92) "C# Kafka重置到最新的偏移量,即从指定的Partition订阅消息使用Assign方法" ["intro"]=> string(428) "在使用Kafka的过程中,消费者断掉之后,再次开始消费时,消费者会从断掉时的位置重新开始消费。 场景再现:比如昨天消费者晚上断掉了,今天上午我们会发现kafka消费的数据不是最新的,而是昨天晚上的数据,由于数据量比较多,也不会及时的消费到今天上午的数据,这个时候就需要我们对偏移量进行重置为最新的,以" ["username"]=> string(10) "goodboydcc" ["tagsname"]=> string(10) ".NET|Kafka" ["tagsid"]=> string(13) "["300","440"]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1681202402" ["_id"]=> string(9) "308660872" } [5]=> array(10) { ["id"]=> string(9) "308660870" ["text"]=> string(42) "Django怎么使用原生SQL查询数据库" ["intro"]=> string(392) "这篇文章主要介绍“Django怎么使用原生SQL查询数据库”,在日常操作中,相信很多人在Django怎么使用原生SQL查询数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django怎么使用原生SQL查询数据库”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! D" ["username"]=> NULL ["tagsname"]=> string(20) "django|sql|数据库" ["tagsid"]=> NULL ["catesname"]=> string(0) "" ["catesid"]=> NULL ["createtime"]=> string(10) "1681201981" ["_id"]=> string(9) "308660870" } [6]=> array(10) { ["id"]=> string(9) "308660871" ["text"]=> string(37) "Express怎么实现定时发送邮件" ["intro"]=> string(432) "今天小编给大家分享一下Express怎么实现定时发送邮件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 在开发中我们有时候需要每隔 一段时间发送一次电子邮件,或者在某个特定的时间进行发" ["username"]=> NULL ["tagsname"]=> string(7) "express" ["tagsid"]=> NULL ["catesname"]=> string(0) "" ["catesid"]=> NULL ["createtime"]=> string(10) "1681201981" ["_id"]=> string(9) "308660871" } [7]=> array(10) { ["id"]=> string(9) "308660869" ["text"]=> string(29) "mysql运维------分库分表" ["intro"]=> string(412) "1. 介绍 问题分析: 随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费" ["username"]=> string(13) "qds1401744017" ["tagsname"]=> string(5) "mysql" ["tagsid"]=> string(7) "["237"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1681200304" ["_id"]=> string(9) "308660869" } [8]=> array(10) { ["id"]=> string(9) "308660868" ["text"]=> string(41) "ASP.NET Core - 缓存之内存缓存(下)" ["intro"]=> string(292) "话接上篇 [ASP.NET Core - 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些" ["username"]=> string(6) "wewant" ["tagsname"]=> string(12) "asp.net core" ["tagsid"]=> string(7) "["179"]" ["catesname"]=> string(25) "APS.NET Core 系列总结" ["catesid"]=> string(9) "["15288"]" ["createtime"]=> string(10) "1681200302" ["_id"]=> string(9) "308660868" } [9]=> array(10) { ["id"]=> string(9) "308660867" ["text"]=> string(9) "SPI协议" ["intro"]=> string(334) "SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外设接口。广泛用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。区分它与I2C协议差异以及FLASH存储器与EEPROM存储器的区别。下面我们分别对SPI协议的物理层及协议层进行讲解。" ["username"]=> string(8) "Kaelthas" ["tagsname"]=> string(5) "STM32" ["tagsid"]=> string(8) "["1311"]" ["catesname"]=> string(5) "STM32" ["catesid"]=> string(8) "["1139"]" ["createtime"]=> string(10) "1681199702" ["_id"]=> string(9) "308660867" } } ["count"]=> int(5621682) } SHOI2013 超级跳马 - 爱码网

我是常年游荡于题解区的幽灵。

直观的想法就是前缀和+差分优化DP, 但还有些比较奇妙的方法or trick:

  1. \(f[i][j] = f[i-1][j-1]+f[i-1][j]+f[i-1][j+1]+\color{red}{f[i-2][j]}\), 因为可以一步跳到 \(f[i][j]\) 的状态也可以一步跳到 \(f[i-2][j]\), 反过来也成立 。

  2. 只考虑从左边某个特定的列的转移矩阵, 设为 \(J\), 设第 \(i\) 列的答案矩阵是 \(A_i\), 则有:\(A_n = J*(A_{n-1}+A_{n-3}+A_{n-5}+\cdots)\)\(A_{n-2} = J*(A_{n-3}+A_{n-5}+A_{n-7}+\cdots)\), 不难得出 \(A_n = J*A_{n-1}+A_{n-2}\), 这也是个递推, 构造矩阵:

\[[ \begin{matrix} J & E\\ E & O \end{matrix} ] * [ \begin{matrix} A_n\\ A_{n+1} \end{matrix} ]=[ \begin{matrix} A_{n+1}\\ A_{n} \end{matrix} ] \]

其中 \(E\) 是单位矩阵而 \(O\) 是全零矩阵,就可以大力递推了。

  1. 这个, 建图

接下来选择性地实现/口胡上述的某些解法(我挺中意矩阵套矩阵的解法)


直观解法

s0[i] 维护与当前列差偶数列的第 i 行的方案数之和, s1[i] 则是相差奇数列的。

考虑转移到下一列, 则有:
s0[i] <- s1[i] + s0[i-1] + s0[i] + s0[i+1]

s1[i] <- s0[i]


矩阵套矩阵

#include<bits/stdc++.h>

using namespace std;

const int mo = 30011;
int n,m;

int qm(int x) { return x>=mo?x-mo:x; }

struct M{
	int t[51][51];
	M() {memset(t,0,sizeof t);  }
};
M operator*(const M &a, const M &b) {
	M c; for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)for(int k=1;k<=n;++k)
			c.t[i][j] = qm(c.t[i][j] + a.t[i][k]*b.t[k][j]%mo);
	return c;
}
M operator+(const M &a, const M &b) {
	M c; for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)
			c.t[i][j] = qm(a.t[i][j] + b.t[i][j]);
	return c;
}

struct M2{ M t[3][3]; } S,T,Delta;
M2 operator*(const M2 &a, const M2 &b) {
	M2 c; for(int i=1;i<=2;++i)for(int j=1;j<=2;++j)for(int k=1;k<=2;++k)
			c.t[i][j]= c.t[i][j] + a.t[i][k]*b.t[k][j];
	return c;
}

int main()
{
	scanf("%d%d",&n,&m);
	S.t[1][1].t[1][1] = S.t[1][1].t[2][1] = 1;//µÚ¶þÁеĴ𰸾ØÕó
	if(m==2) return printf("%d",S.t[1][1].t[n][1]),0;
	for(int i=1;i<=n;++i) {
		T.t[1][2].t[i][i] = T.t[2][1].t[i][i] = 1;
		T.t[1][1].t[i][i-1] = T.t[1][1].t[i][i] =T.t[1][1].t[i][i+1] = 1;
	}
	m -= 3;
	Delta = T;
	while(m)
	{
		if(m&1) Delta = Delta * T;
		T = T*T;
		m >>= 1;
	}
	S = Delta*S;
	printf("%d",S.t[1][1].t[n][1]);
	return 0;
}

相关文章:

  • 2021-12-07
  • 2021-08-26
  • 2022-01-05
  • 2022-02-05
  • 2021-06-30
  • 2022-02-12
  • 2022-01-25
  • 2022-01-05
猜你喜欢
  • 2021-07-01
  • 2021-11-25
  • 2021-11-27
  • 2021-08-16
  • 2021-11-01
  • 2021-08-22
  • 2021-05-28
相关资源
相似解决方案