zoj 3870

제목 링크:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518
제목: n 개의 수, 그 중에서 두 개의 수 를 선택 하고 이 두 개의 수의 차이 나 값 이 두 개의 수 보다 큰 수의 조합 이 몇 가지 가 있 는 지 물 어보 세 요.
제목
코드:
#include<bits/stdc++.h>

using namespace std;

const int MaxN = 1e5 + 10;
int a[MaxN], bit[50]; // bit[i]            1  i  

void solve(int x) 
{
    int l = 31;
    while(l >= 0) 
    {
        if(x & (1<<l)) 
        {
            bit[l]++;
            return ;
        }
        l--;
    }
    return ;
}

int main() 
{
    int T, n;
    scanf("%d", &T);
    while(T--) 
    {
        scanf("%d", &n);
        memset(bit, 0, sizeof(bit));
        for(int i = 0; i < n; i++) 
        {
            scanf("%d", &a[i]);
            solve(a[i]);
        }
        int ans = 0;
        for(int i = 0; i < n; i++) 
        {
            int l = 31;
            while(l >= 0) 
            {
                if(a[i] & (1<<l)) break;
                l--;
            }
            while(l >= 0) 
            {
                if(!(a[i] & (1<<l))) ans += bit[l];
                l--;
            }
        }
        printf("%d
", ans); } return 0; }

좋은 웹페이지 즐겨찾기