zoukankan      html  css  js  c++  java
  • [二分] PKU 1840 Eqs

    二分:3+2;

    # include <stdio.h>
    # include <stdlib.h>
    
    # define trq(x) ((x)*(x)*(x))
    
    int a[5];
    long long ans = 0;
    int h[105];
    int f[305*105*105], g[305*105];
    
    /************************************************************/
    int cmp(const void *x, const void *y)
    {
        return *(int*)x - *(int*)y;
    }
    
    int bins(int *v, int key, int n)
    {
        int low = 0, high = n-1, mid, x, y;
        if (key<v[0] || key>v[high])
            return 0;
        while (low+1 < high)
        {
            mid = low + ((high-low)>>1);
            if (v[mid] >= key) high = mid;
            else low = mid;
        }
        x = (v[low]==key ? low-1:low);
        low = 0, high = n-1;
        while (low+1 < high)
        {
            mid = low + ((high-low)>>1);
            if (v[mid] <= key) low = mid;
            else high = mid;
        }
        y = (v[high]==key ? high:high-1);
        return y-x;
    }
    
    /************************************************************/
    
    int main()
    {
        int i, j, k, n = 0, m = 0;
        
        for (i = 0; i < 5; ++i) scanf("%d", &a[i]);
        for (i = -50; i <= 50; ++i) if (i != 0)
        for (j = -50; j <= 50; ++j)    if (j != 0)
        {
            g[n++] = trq(i)*a[3]+trq(j)*a[4];
            for (k = -50; k <= 50; ++k) if (k != 0)
                f[m++] = trq(i)*a[0]+trq(j)*a[1]+trq(k)*a[2];
        }
        qsort(g, n, sizeof(g[0]), cmp);
        qsort(f, m, sizeof(f[0]), cmp);
        
        for (i = 0; i < n; ++i)
            ans += bins(f, -g[i], m);
        printf("%lld\n", ans);
    
        return 0;
    }
  • 相关阅读:
    vs中无法找到头文件
    c++ vector 用法
    c++ queue 用法
    c++ 中 毫秒级时间获取
    vs2013 boost signals
    vs2013环境下boost配置
    C++ static 用法
    fopen()和fclose()
    删除字符串尾的回车符
    WaitForSingleObject()
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2652803.html
Copyright © 2011-2022 走看看