#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;
}
提前谢谢!
答案 0 :(得分:2)
问题是要求乘积为奇数(零因数为2)或乘以四(至少为两个因数为2)的子数组的数量。 我们也可以将其反转:取子数组(2 ** N)的个数,然后减去正好为 为2的子数组的个数。
因此,首先对数组进行预处理,并用因子2替换每个数字(即7变为0,8变为3,依此类推)。 然后的问题是“有多少个子数组合计为一个精确的子数组”,这具有已知的解决方案。
答案 1 :(得分:0)
该问题直接与Codechef的(四月挑战)联系在一起。我认为在比赛结束(2020年3:00 pm,13/04/2020)之前直接在这里提问不是一个好主意。
请遵守Codechef的法规。如果您不相信我的话,可以在此链接中查看。
https://www.codechef.com/APRIL20B/problems/SQRDSUB或直接访问Codechef四月挑战赛(平方序列)。