Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算所有可能子阵列的乘积数,其中乘积应可被4整除或为奇数_C++_C++11 - Fatal编程技术网

C++ 计算所有可能子阵列的乘积数,其中乘积应可被4整除或为奇数

C++ 计算所有可能子阵列的乘积数,其中乘积应可被4整除或为奇数,c++,c++11,C++,C++11,我试图计算由所有可能的子数组生成的奇数或可被4整除的乘积的数量,但我的实现得到了O(n^2)。。。。我需要一点时间。我也试着找一些图案,但找不到 这是我的密码 #include<bits/stdc++.h> #define lli long long int using namespace std; int main() { lli testcases,x,M=1000000007; cin>>testcases; for(x=0;x<tes

我试图计算由所有可能的子数组生成的奇数或可被4整除的乘积的数量,但我的实现得到了O(n^2)。。。。我需要一点时间。我也试着找一些图案,但找不到 这是我的密码

#include<bits/stdc++.h>
#define lli long long int
using namespace std;
int main()
{
    lli testcases,x,M=1000000007;
    cin>>testcases;
    for(x=0;x<testcases;x++){
        lli n,i,j,temp,count1=0;
        cin>>n;
        vector<lli>v;
        for(i=0;i<n;i++){
            cin>>temp;
            v.push_back(temp);
        }
        for(i=0;i<n-1;i++){
            if(v[i]%2!=0 || v[i]%4==0){
                ++count1;
            }
            temp=v[i];
            for(j=i+1;j<v.size();j++){
                temp*=v[j];
                if(temp%2!=0 || temp%4==0){
                    ++count1;
                }
            }
        }
        if(v[n-1]%2!=0 || v[n-1]%4==0){
            ++count1;
        }
        cout<<count1<<"\n";
        count1=0;
    }
    return 0;
}
#包括
#定义lli长整型
使用名称空间std;
int main()
{
lli测试用例,x,M=100000007;
cin>>测试用例;
对于(x=0;x>n;
向量;
对于(i=0;i>temp;
v、 推回(温度);
}

对于(i=0;i而言,问题是询问其乘积为奇数(零因子2)或四的倍数(至少两因子2)的子阵列的数量。 我们也可以反过来:取子阵列的数量(2**N),减去正好有一个因子为2的子阵列的数量

因此,首先对数组进行预处理,并将每个数字替换为2的因子(即7变为0,8变为3,等等)。
然后,问题是“多少子阵列和正好是一”,这有一个已知的解决方案。

问题是询问其乘积为奇数(零因子二)或四的倍数(至少两因子二)的子阵列的数量。 我们也可以反过来:取子阵列的数量(2**N),减去正好有一个因子为2的子阵列的数量

因此,首先对数组进行预处理,并将每个数字替换为2的因子(即7变为0,8变为3,等等)。
然后,问题是“多少子阵列加起来正好是一个”,这有一个已知的解决方案。

这个问题直接与codechef的(4月长的挑战)有关。我认为在比赛结束前(2020年4月13日下午3:00)直接问这个问题不是一个好主意。 请遵守codechef的规章制度。如果你不相信我的话,可以在这个链接上查看。

或者直接访问codechef四月挑战赛(平方子序列)。

这个问题与codechef的(四月挑战赛)直接相关。我认为在比赛结束前(2020年4月13日下午3:00)直接在这里提问不是一个好主意。 请遵守codechef的规章制度。如果你不相信我的话,可以在这个链接上查看。

或者直接访问codechef april challenge(平方子序列)。

观察:一次子阵列[i,j]可以被4整除,任何包含它的较大的子数组也可以被4整除。这就像是从一些在线竞赛站点中得到的一个典型的谜题。如果你的目标是学习C++,你将无法在那里学习任何东西。在几乎所有的情况下,像这样的一个,正确的解决方案需要知道某种数学或编程技巧。现在的诀窍是,尝试编写一种蛮力的方法,你的程序永远运行,失败了。如果你想学习C++,你就不能从毫无意义的在线竞赛网站中学习到任何东西。可以被4整除,任何包含它的较大的子数组也可以被4整除。这就像是从一些在线竞赛站点中得到的一个典型的谜题。如果你的目标是学习C++,你将无法在那里学习任何东西。在几乎所有的情况下,像这样的一个,正确的解决方案需要知道某种数学或编程技巧。现在的诀窍是,并试图编写一个蛮力的方法,你的程序永远运行,失败的原因。如果你试图学习C++,你将从没有意义的在线竞赛站点中学习任何东西,或者,如果你喜欢这个符号,请写代码> PoW(2,N)< /> >代码> 0%==0</Cord>,但是没有2个2或更多的倍数;而且0也是一个需要处理的特殊情况。@Botje原始数组是2 5 6,如果在处理2后数组仍然存在,那么2的因子将是:1 0 0,那么答案应该是什么?6也可以被2整除…因此预处理的数组将是[1,0,1]@先生,你能用一些解释性的例子详细告诉我预处理的数组是怎样的吗?如果你喜欢这种表示法,你可以告诉我,或者
pow(2,N)
0%4==0
,但没有2或2的倍数;)而且0也是一个需要处理的特殊情况。@Botje原始数组是2 5 6,如果在处理2后数组仍然存在,那么2的因子将是:1 0 0,那么答案应该是什么?6也可以被2整除…因此预处理的数组将是[1,0,1]@先生,你能用一些解释性的例子详细地告诉我预处理数组的情况吗