C++ 计算所有可能子阵列的乘积数,其中乘积应可被4整除或为奇数
我试图计算由所有可能的子数组生成的奇数或可被4整除的乘积的数量,但我的实现得到了O(n^2)。。。。我需要一点时间。我也试着找一些图案,但找不到 这是我的密码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
#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]@先生,你能用一些解释性的例子详细地告诉我预处理数组的情况吗