hdu 1496

来源:互联网 发布:阿里云客服工作台 编辑:程序博客网 时间:2024/06/06 05:11

之前做过一个类似的题


还是学得不好


#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int M = 175447;int counts[M];int result[M];int temp[101];int hashInt(int s){    int k = s % M;    if (k < 0) k += M;    while (counts[k] && result[k]!=s) k = (k + 1) % M;//如果当前对应不为空 且对应的不是s 则继续寻找    return k;}int solve(int a, int b, int c, int d) {    if (a>0&&b>0&&c>0&&d>0 || a<0&&b<0&&c<0&&d<0) return 0;    memset(counts, 0, sizeof(counts));    int s, p, i, j;    for (i=1; i<101; ++i) {        for (j=1; j<101; ++j) {            s = a * temp[i] + b * temp[j];            p = hashInt(s);            result[p] = s;//            ++counts[p];        }    }    int ans = 0;    for (i=1; i<101; ++i) {        for (j=1; j<101; ++j) {            s = -(c * temp[i] + d * temp[j]);            p = hashInt(s);            ans += counts[p];        }    }    return ans;}int main() {    int a, b, c, d;    for (int i=1; i<101; ++i) temp[i] = i * i;    while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF) {        int ans = solve(a, b, c, d);        printf ("%d\n", ans<<4);    }    return 0;}


0 0