普及组月赛T2TLE HELP

[202504D]守护空间站

TLE 80

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int L = 2e5+10;
int ar[L],n;
void solve(){
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>ar[i];
    }
    int res = 0;
    for(int i=2;i<=n; i++){
	    for(int j=1;j<i;j++){
	        if((ar[i]&ar[j])>=(ar[i]^ar[j]))res++;
	    }
    }
    cout<<res<<"\n";
}
signed main(){
   	freopen("202504D.in","r",stdin);
    freopen("202504D.out","w",stdout);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

(帖子已被作者删除)

思路

使用位运算1<<x来优化

代码实现

for(int i=29;i>=0;i--)
{
    cnt=0;
    for(int j=1;j<=n;j++)
    {
        if(ar[j]>=(1<<i)&&ar[j]<(1<<(i+1)))
            cnt++;
    }
    res+=cnt*(cnt-1)/2;
}
cout<<res<<"\n";

那么给哪条解决方案?

Thank you.
屏幕截图 2025-04-20 205911

上面那条