进一步优化加号乘法(codechef)代码的方法

进一步优化加号乘法(codechef)代码的方法,c,algorithm,C,Algorithm,在CodeChef上解决这个问题的代码时,我尝试使用二进制搜索来解决它,但我的解决方案给出了一个小错误 我编写了以下代码: #include <stdio.h> int main() { int t; scanf("%d",&t); for(int a=0;a<t;a++) { int n; scanf("%d",&n); int arr[n]; for(int i

在CodeChef上解决这个问题的代码时,我尝试使用二进制搜索来解决它,但我的解决方案给出了一个小错误

我编写了以下代码:

#include <stdio.h>

int main()
{
    int t;
    scanf("%d",&t);
    for(int a=0;a<t;a++)
    {
        int n;
        scanf("%d",&n);
        int arr[n];
        for(int i=0;i<n;i++)
        scanf("%d",&arr[i]);
        int s=0,j,k,f,m,mm;
         (n%2==0)?(mm=n/2+1):(mm=n/2+1);

        for(j=0;j<mm;j++)
        {
            f=n-j-1;
            for(k=j+1;k<n-1;k++)
            {
                m=n-k-1;
                if((arr[j]*arr[k])==(arr[j]+arr[k]))
                s++;
                if((arr[f]*arr[m])==(arr[f]+arr[m]))
                s++;
            }

        if((arr[j]*arr[k])==(arr[j]+arr[k]))
            s++;        
        }
      printf("%d\n",s);
    }
    return 0;
}
#包括
int main()
{
int t;
scanf(“%d”、&t);

对于(inta=0;a,根据您的解决方案,我认为代码的复杂性为O(n^2)

但是,根据给定的约束条件,问题期望我以O(n)时间复杂度来解决它

属性
ab=a+b
是特殊的,仅对
0
2
具有独占性

因此,只需找到0和2的对数

它可以通过组合计算

请查看以下代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;

int main(){

    int t;
    cin>>t;

    while(t--){

        int n;
        cin>>n;

        LL z = 0; //Zero count
        LL t = 0; //One count

        while(n--){

            int x;
            cin>>x;
            if(x==0){
                z++;
            }
            if(x==2){
                t++;
            }
        }

        cout<<((z)*(z-1LL)/2LL) + ((t)*(t-1LL)/2LL)<<endl; 
    }

    return 0;
}
#包括
使用名称空间std;
typedef long long int LL;
int main(){
int t;
cin>>t;
而(t--){
int n;
cin>>n;
LL z=0;//零计数
LL t=0;//一次计数
而(n--){
int x;
cin>>x;
如果(x==0){
z++;
}
如果(x==2){
t++;
}
}

旁白:
int-arr[n]
不是标准的。只有一些编译器接受它。这个问题来自正在进行的比赛。比赛已于16日结束,我的错。我阅读了上面的栏。这个问题已经分析并回答了。请记住在发布前搜索。