首页 > 其他分享 >P4967 黑暗打击

P4967 黑暗打击

时间:2023-07-16 13:22:50浏览次数:55  
标签:打击 include 黑暗 int P4967 register bmatrix mod lld

题目链接:P4967 黑暗打击

题意

对于 \(n\) 阶的 \(\mathsf{Hilbert}\) 曲线,从上往下灌水,能淹没几个单位面积?

这是 \(1 \sim 4\) 阶的 \(\mathsf{Hilbert}\) 曲线:

\(h_1\),如最左图所示,是一个缺上口的正方形,这个正方形的边长为 \(1\)。 从\(h_2\) 开始,按照以下方法构造曲线 \(h_i\): 将 \(h_{i-1}\) 复制四份,按 \(2\times2\) 摆放。
把左上一份逆时针转 \(90^{\circ }\),右上一份顺时针转 \(90^{\circ }\),然后用三条单位线段将四分曲线按照左上-左下-右下-右上的顺序连接起来。如图所示,分别展示的是 \(h_2\),\(h_3\),\(h_4\)。加粗的线段是额外用于连接的线段。

注,此题要求对 \(9223372036854775783\) 取模。

\(n \leqslant 10^{10000}\)

Solution

通过观察法,可得以下式子:

\[\begin{cases} f_n = 2f_{n - 1} + 2g_{n - 1} + 3s_{n - 1} + 1\\ g_n = f_{n - 1} + 2g_{n - 1} + s_{n - 1}\\ s_n = 2s_{n - 1} + 1\\ \end{cases}\]

其中, \(f_n\) 即为所求, \(g_n\)为旋转90°后可以进水的面积, \(s_n\) 为图形的边长。

写出转移矩阵,则有:

\[\begin{bmatrix} f_{n-1} & g_{n-1} & s_{n-1} & 1 \end{bmatrix} · \begin{bmatrix} 2 & 1 & 0 & 0 \\ 2 & 2 & 0 & 0 \\ 3 & 1 & 2 & 0 \\ 1 & 0 & 1 & 1 \\ \end{bmatrix} = \begin{bmatrix} f_{n} & g_{n} & s_{n} & 1 \end{bmatrix} \]

考虑使用矩阵快速幂进行转移,发现 \(n \leqslant 10^{10000}\) , 在规定的时间范围内无法转移。

考虑到线性代数中,矩阵的幂可以转化成对角矩阵求特征值,然后再转换成分别求幂,这种方法可以基于欧拉定理来实现,不妨猜想在矩阵中也可以如此操作。

然而事实上并不是所有的矩阵都可以如此操作,对矩阵对角化后的性质有一定要求,同时跟二次剩余等数论知识有关,不太现实。

对于该种方法不能实现的情况下,参照P4000 斐波那契数列,猜想循环节再加以计算,但是后者时间复杂度较高。

但是起码这道题可以通过欧拉定理来实现快速求解。

但是还是被卡常了,可以对原有公式化简或者使用__int128代替龟速乘解决。

Code

点击查看代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <random>
#include <unordered_map>

using namespace std;

typedef long long lld;
const int N = 1e4 + 50;
const lld mod = 9223372036854775783;

inline int read() {
	register int w = 0, f = 1;
	register char c = getchar();
	while (c > '9' || c < '0') {
		if (c == '-')  f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		w = w * 10 + c - '0';
		c = getchar();
	}
	return w * f;
}

inline lld add(register lld a, register lld b) {
	a += b;
	if (a > mod)  a -= mod;
	return a;
}

inline lld mul(register lld a, register lld b) {
	register lld ans = 0;
	while (b) {
		if (b & 1ll)  ans = add(ans, a);
		a = add(a, a);
		b >>= 1ll;
	}
	return ans;
}

struct Mat {
	int n, m;
	lld dat[5][5];
	Mat () {
		memset(dat, 0, sizeof (dat));
	}	
	lld * operator [] (register int x) {
		return dat[x];
	}
	inline void init() {
		for (register int i = 1; i <= n; ++i)
			dat[i][i] = 1;
	}	
};


Mat operator * (register Mat a, register Mat b) {
	register Mat c;
	c.n = a.n, c.m = b.m;
	for (register int i = 1; i <= c.n; ++i)
		for (register int j = 1; j <= c.m; ++j)
			for (register int k = 1; k <= a.m; ++k)
				c[i][j] = (c[i][j] + mul(a[i][k], b[k][j])) % mod;
	return c;
}

inline Mat qpow(register Mat a, lld b) {
	Mat base;
	base.n = base.m = 4;
	base.init();
	while (b) {
		if (b & 1ll)  base = base * a;
		a = a * a;
		b >>= 1;
	}
	return base;
}

Mat G, T;

char s[N];

int main() {
	scanf("%s", s + 1);
	G.n = 1, G.m = 4;
	G[1][1] = G[1][3] = G[1][4] = 1;
	T.n = T.m = 4;
	T[1][1] = 2, T[1][2] = 1;
	T[2][1] = 2, T[2][2] = 2;
	T[3][1] = 3, T[3][2] = 1, T[3][3] = 2;
	T[4][1] = T[4][3] = T[4][4] = 1;
	register lld sum = 0;
	for (register int i = 1; s[i]; i++)
		sum = (sum * 10 + s[i] - '0') % (mod - 1);
	sum = (sum - 1 + mod) % mod;
	T = qpow(T, sum);
	G = G * T;
	printf("%lld\n", G[1][1]);
	return 0;
}

标签:打击,include,黑暗,int,P4967,register,bmatrix,mod,lld
From: https://www.cnblogs.com/abigjiong/p/17557723.html

相关文章

  • ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正
    本文介绍基于ENVI软件,实现对Landsat7遥感影像加以预处理与多种不同大气校正方法的操作。目录1数据导入与辐射定标2波段合成3编辑头文件4转换文件格式5QUAC快速大气校正6简化黑暗像元法大气校正7FLAASH大气校正8大气校正结果与其他处理对比分析8.1三种大气校正方法结果......
  • 「升维打击」- 高维前缀和与 SOSDP
    高维前缀和众所周知,一维前缀和即\(s_i=\sum\limits_{p=1}^ia_p\),二维前缀和则是通过容斥原理来求:由图,显然可以得到\(s_{i,j}=a_{i,j}+s_{i-1,j}+s_{i,j-1}+s_{i-1,j-1}\)。那么,同理推到三维,可以得到\(s_{i,j,k}=a_{i,j,k}+s_{i-1,j,k}+s_{i,j-1,k}+s_{i,j,k-1}-s_{i-1,j-......
  • 想理解深度学习,究竟应该降维打击 or 升维思考?
    题图|DesignedbyFreepik让我们从一道选择题开始今天的话题。什么是神经网络?请选择以下描述正确的一项或多项。A.神经网络是一种数学函数,它接收输入并产生输出。B.神经网络是一种计算图,多维数组流经其中。C.神经网络由层组成,每层都具有「神经元」。D.神经网络是一种通用函数......
  • 91 面向对象 乔峰和鸠智摩回合制打击
    对象packagecom.fqs.GeDou;publicclassGeDou{//属性privateStringname;privateintxue;privateintshangHai;publicGeDou(){}publicGeDou(Stringname,intxue,intshangHai){this.name=name;this.xu......
  • DDOS和CC打击的区别,哪种打击对服务器伤害更大
    近几年,网络恶意打击逐渐增多,很多网站饱受困扰,而其中最为常见的恶意打击就是CC以及DDoS打击,对于一些防御能力较弱的网站来说,一旦遭遇这些打击,轻则网站瘫痪,重则直接影响流量导致无法生存,那么DDoS打击和CC打击区别在哪里?哪一个对服务器伤害比较大?下面来简单分析一下DDoS打击DDoS打击(分......
  • 微信视频号加强打击肖像授权侵权短视频
    我是卢松松,点点上面的头像,欢迎关注我哦!视频号安全中心发布公告称:视频号将打击肖像权和侵权的短视频,并在7月份上线“视频授权功能”。5月份视频号已经下架了3万多条视频,1万多个帐号减少推荐。你看3-4月份视频号有疯狂小杨哥的切片视频,现在你还能看到多少?以下是视频号给出的案例:这是......
  • 外汇天眼:ThinkMarkets因经营不善或将被收购,韩国券商遭监管机构打击暂停开户
    过去一周在国外引人关注的外汇行业新闻包括:FGAcquisition股东将于6月29日就ThinkMarkets合并事项进行投票、韩国券商遭监管机构打击,暂停为交易者开设新账户。具体新闻如下!1、FGAcquisition股东将于6月29日就ThinkMarkets合并事项进行投票近期,在加拿大的特殊目的收购公司(SPAC)FGac......
  • Chrome 护眼模式 - 黑暗模式 - 夜眼(Night Eye) 插件
    Chrome地址栏里输入:chrome://extensions/打开插件商城:......
  • 计算机技术人性黑暗面和光明面
    黑暗面1.利用技术作e。我工作身边有很多这样的人,比如维护人员在的时间服务器好好的,他一走立马就出事。2.照搬和抄袭。比如明明是别人的东西说成是自己的。像华微和疼迅是业内代表。3.不共享。比如你问他技术,不但不说还把你羞辱一番。态度十分傲慢,对人冷漠。 光明面1.开源免......
  • 世界的黑暗
    未经他人苦,莫劝他人善。压死骆驼的不是最后一根稻草,而是你站在道德制高点上去批判一个人,不是人人都会遇到南河和平安哥,你所谓的就一句开玩笑的话,可能就造成了一个人的死亡,这个世界到底怎么了?但总有些人憋着一口气,想去拯救世界,但发现自己是多么的渺小,就觉得很无奈。只想说一句未......