1. 程式人生 > 其它 >計數法(搬運)

計數法(搬運)

int func(int *iq, int size) {
    int cnt = 0;
    for(i = 0; i < size; ++i) {
        if(iq[i] > 163) 
        {
            ++cnt;
        }
    }
    return cnt;
}

int *func(int *iq, int size, int IQMax) {                // (1)
    int i;
    int *cnt = (int *)malloc( sizeof(int) * (IQMax+1) ); // (2)
    memset(cnt, 0, sizeof(int) * (IQMax+1));             // (3)
    for(i = 0; i < size; ++i) {
         ++cnt[ iq[i] ];                                 // (4)
    }
    return cnt;                                          // (5)
}

int cnt[ (1<<21) + 1 ];
int countPairs(int* deliciousness, int deliciousnessSize){
    int i, sum = 0;
    int ans = 0;
    memset (cnt, 0, sizeof(cnt));                    // (1)

    for(i = 0; i < deliciousnessSize; ++i) {         // (2)
        for(sum = 1; sum <= (1<<21); sum *= 2) {     // (3)
            other = sum - deliciousness[i];          // (4)
            if (other < 0) {                         // (5) 
                continue;
            }
            ans += cnt[ other ];                     // (6)
            ans %= 1000000007;
        }
        ++ cnt[ deliciousness[i] ];                  // (7)
    }
    return ans;                                      // (8)
}