社区讨论

vector矩乘被卡常?

CF718CSasha and Array参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo3cdtpa
此快照首次捕获于
2023/10/24 04:20
2 年前
此快照最后确认于
2023/10/24 04:20
2 年前
查看原帖
我之前的矩阵乘法模板是这样的:
CPP
typedef vector<vector<int> >Mat;
Mat NewMat(int n , int m)
{
	Mat c; c.resize(n + 1);
	for(int i = 0 ; i <= n ; i++)c[i].resize(m + 1);
	c[0][0] = n , c[0][1] = m;
	return c;
}
Mat operator + (const Mat& a , const Mat& b);
Mat operator * (const Mat& a , const Mat& b);
Mat operator ^ (Mat x , int p);
然而在这道题被卡常,一直 TLE on test 18。
由于本题矩阵很小,怀疑 vector 在开空间时花费时间较多。
然后把 vector 改成了 array,就过了。
CPP
typedef array<array<int , 3> , 3> Mat;
Mat NewMat(int n , int m)
{
	Mat c;
	c[0] = {n , m , 0};
	c[1] = {0 , 0 , 0};
	c[2] = {0 , 0 , 0};
	return c;
}
Mat operator + (const Mat& a , const Mat& b);
Mat operator * (const Mat& a , const Mat& b);
Mat operator ^ (Mat x , int p);
但在【模板】矩阵快速幂 上这两种写法时间上并没有什么差别。
所以 vector 写矩阵乘法会被卡常吗?如果会,会在什么情况下?

回复

1 条回复,欢迎继续交流。

正在加载回复...