zoukankan      html  css  js  c++  java
  • hdu 1496 Equations

    题目连接

    http://acm.hdu.edu.cn/showproblem.php?pid=1496  

    Equations

    Description

    Consider equations having the following form: 

    a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
    a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.

    It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.

    Determine how many solutions satisfy the given equation.

    Input

    The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
    End of file.

    Output

    For each test case, output a single line containing the number of the solutions.

    Sample Input


    1 2 3 -4
    1 1 1 1

    Sample Output

    39088
    0

    哈希。。

    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    #include<map>
    using std::map;
    using std::min;
    using std::sort;
    using std::pair;
    using std::vector;
    using std::multimap;
    #define pb(e) push_back(e)
    #define sz(c) (int)(c).size()
    #define mp(a, b) make_pair(a, b)
    #define all(c) (c).begin(), (c).end()
    #define iter(c) __typeof((c).begin())
    #define cls(arr, val) memset(arr, val, sizeof(arr))
    #define cpresent(c, e) (find(all(c), (e)) != (c).end())
    #define rep(i, n) for(int i = 0; i < (int)n; i++)
    #define tr(c, i) for(iter(c) i = (c).begin(); i != (c).end(); ++i)
    const int N = 2100000;
    const int INF = 0x3f3f3f3f;
    short hash[N << 1 | 1];
    int a, b, c, d;
    inline int squre(int x) {
        return x * x;
    }
    void solve() {
        cls(hash, 0);
        int ans = 0, ret = 0;
        for(int i = -100; i <= 100; i++) {
            if(!i) continue;
            for(int j = -100; j <= 100; j++) {
                if(!j) continue;
                ret = a * squre(i) + b * squre(j);
                hash[N - ret]++;
            }
        }
        for(int i = -100; i <= 100; i++) {
            if(!i) continue;
            for(int j = -100; j <= 100; j++) {
                if(!j) continue;
                ret = c * squre(i) + d * squre(j) + N;
                if(ret >= 0 && ret <= 2 * N) ans += hash[ret];
            }
        }
        printf("%d
    ", ans);
    }
    int main() {
    #ifdef LOCAL
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w+", stdout);
    #endif
        while(~scanf("%d %d %d %d", &a, &b, &c, &d)) {
            if(a < 0 && b < 0 && c < 0 && d < 0 || a > 0 && b > 0 && c > 0 && d > 0) {
                puts("0");
                continue;
            }
            solve();
        }
        return 0;
    }
  • 相关阅读:
    夺命雷公狗jquery---4内容选择器
    夺命雷公狗jquery---3普通选择器
    夺命雷公狗jquery---2层级选择器
    夺命雷公狗jquery---1选择元素的3种方法
    Java 基本类型相互转换
    java 数据类型与基本编码
    语言学习
    JAVA SE 基础复习-面向对象 异常机制
    奶牛问题
    JAVA SE 基础复习-IO与序列化(3)
  • 原文地址:https://www.cnblogs.com/GadyPu/p/4792722.html
Copyright © 2011-2022 走看看