C ++位集算法

即时战略

我得到了一个nxn网格,其中填充有1或0。我想计算转角瓦片均为1的子网格的数量。我的解决方案遍历所有行对并计算匹配的1的数量,然后使用公式numOf1s *(numOf1s-1)/ 2并将其添加到结果中。但是,当我在https://cses.fi/problemset/task/2137上提交解决方案时,n = 3000(可能是由某些错误引起)的输入上没有输出。错误可能是什么?

int main()
    {
    
        int n; cin>> n;
        vector<bitset<3000>> grid(n);
        for(int i=0;i<n;i++){
            cin >> grid[i];
        }
        long result = 0;
        for(int i=0;i<n-1;i++){
            for(int j=i+1;j<n;j++){
                int count = (grid[i]&grid[j]).count();
                result += (count*(count-1))/2;
            }
        }
        cout << result;
    }
穆罕默德·马格迪(Mohamed Magdy)

此解决方案将导致超过时间限制。最坏的情况下bitset :: count()为O(n)。您的代码的总复杂度为O(n ^ 3)。在最坏的情况下,操作数将为3000 ^ 3> 10 ^ 10,这太大了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中操作位集

来自分类Dev

位集之间的c ++ XOR

来自分类Dev

具有if语句的C ++位集

来自分类Dev

在C ++中返回位集向量

来自分类Dev

用C语言进行位集打印

来自分类Dev

C中使用按位运算的哈希码算法

来自分类Dev

C中使用按位运算的哈希码算法

来自分类Dev

具有按位运算符的C ++中的算法

来自分类Dev

在C中的位域内格式化并集

来自分类Dev

我应该使用位集还是向量?C ++

来自分类Dev

C ++:如何获取位集的MSB(最高有效位)(使用按位运算符)?

来自分类Dev

C加密/解密算法-将位位置2设置为当前位位置左侧的两个位

来自分类Dev

De Bruijn算法二进制位数64位C#

来自分类Dev

使用AES 256算法c#.net时如何快速遍历数据集?

来自分类Dev

将二进制位集转换为十六进制(C ++)

来自分类Dev

GCC c ++ 11使用大量具有STL位集的RAM <UINT_MAX>

来自分类Dev

如何在C中将位集变量的内容存储到uint32

来自分类Dev

C ++编译器无法使用我的重载<运算符进行位集键比较

来自分类Dev

是否有类似于C ++中的std :: bitset的内置位集?

来自分类Dev

在C ++中将整数数组转换为位集表示的最佳方法?

来自分类Dev

C ++入门手册第五版:表示整数序列的位集

来自分类Dev

GCC c ++ 11使用大量具有STL位集的RAM <UINT_MAX>

来自分类Dev

在32位x86 AT&T程序集上调用C函数的问题

来自分类Dev

将二进制位集转换为十六进制(C ++)

来自分类Dev

是否有可能和正确的从C中的位域形成并集?

来自分类Dev

逆位算法

来自分类Dev

基本的位翻转算法

来自分类Dev

连接点集的算法?

来自分类Dev

合并集的算法挑战