C++ 使用2D向量的大小分配变量的内存

C++ 使用2D向量的大小分配变量的内存,c++,vector,C++,Vector,这是我的代码,我有一个2D向量,我需要将它的行和列的大小转换为一个新变量VISISTED,但会抛出一个错误 int main() { vector<vector<char>>a; int n= a.size(); int m = a[0].size(); bool vertices= new bool [n][m]; } 无法解析原始代码试图通过将三个块的宽度相加w=w1+w2+w3来确定所需的命中数;重复除以强度S,直到剩余宽

这是我的代码,我有一个2D向量,我需要将它的行和列的大小转换为一个新变量VISISTED,但会抛出一个错误

int main() {
    vector<vector<char>>a;
    int n= a.size();
    int m = a[0].size();
    bool vertices= new bool [n][m];
    
}

无法解析

原始代码试图通过将三个块的宽度相加w=w1+w2+w3来确定所需的命中数;重复除以强度S,直到剩余宽度w为零。如果强度S为1,因此w1、w2和w3均为1,且其总和为3,则将永远循环,从而导致超出代码的时间限制

此外,目前尚不清楚如何通过分区解决这一问题。相反,前面提到的问题涉及减法,而不是除法

由于堆叠中只有三块砖,且S至少是最大砖的宽度,因此只有三种情况需要考虑:

if (s >= w1 + w2 + w3)
    hits = 1;
else if (s >= w1 + w2 || s >= w3 + w2)
    hits = 2;
else
    hits = 3;
处理任意大小的砖块堆的一般解决方案超出了问题的范围,因此不需要考虑。

当s==1时,指令w=w/s;不会修改w。您的程序将永远循环,因为终止循环的条件是w==0

这解释了超出您报告的时间

注意,w=w/s;无论如何,我不会给你正确的答案。你明白这个问题了吗?再读一遍


附带的一点是,您应该检查输入的值是否符合约束条件,如果不符合约束条件,则拒绝输入。

思考当s==1时会发生什么。请仔细阅读这个问题——我认为你没有完全理解这个问题。你试图回答的问题的完整定义是必要的吗?我的观点是什么?它在循环中每次递增,但从未用于任何内容。请为您的问题选择一个更好的标题。你的标题没有说明你的问题。写一些日志一些简单的sprintfs也应该在循环中工作,并观察cpu的使用情况。时间限制是什么,代码需要多长时间才能完成?除了时间限制外,你的代码正确吗?它是否打印出任何输入的正确答案?可能添加一些上下文?i、 e.如果这是一个问题的答案,它具体解决了什么问题?为什么它能解决这个问题?
if (s >= w1 + w2 + w3)
    hits = 1;
else if (s >= w1 + w2 || s >= w3 + w2)
    hits = 2;
else
    hits = 3;