首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hdu 1496 Equations(十分巧妙的hash)

2012-11-04 
hdu 1496 Equations(非常巧妙的hash)EquationsTime Limit: 6000/3000 MS (Java/Others)????Memory Limit:

hdu 1496 Equations(非常巧妙的hash)

Equations

Time Limit: 6000/3000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1729????Accepted Submission(s): 662

#include <iostream>#include <stdio.h>#include <algorithm>#include <memory.h>using namespace std;int f1[1000005]; //保存得数是正的int f2[1000005]; //保存得数是负的int main(){ int i, j, k, sum; int a, b, c, d; while(scanf("%d %d %d %d", &a, &b, &c, &d) != EOF) { //abcd全部大于0或者小于0,肯定无解。要加上这个,不然超时 if(a>0 && b>0 && c>0 && d>0 || a<0 && b<0 && c<0 && d<0) { printf("0\n"); continue; } memset(f1, 0, sizeof(f1)); memset(f2, 0, sizeof(f2)); for(i = 1; i <= 100; i++) { for(j = 1; j<= 100; j++) { k = a*i*i + b*j*j; if(k >= 0) f1[k]++; //k>=0 f1[k]++ else f2[-k]++; //k<0 f2[k]++ } } sum = 0; for(i = 1; i <= 100; i++) { for(j = 1; j<= 100; j++) { k = c*i*i + d*j*j; if(k > 0) sum += f2[k]; //若k为正,加上的f2[k] else sum += f1[-k]; //若k为负,加上的f1[k] } } printf("%d\n", 16*sum); //每个解有正有负,结果有2^4种 } return 0;}?

热点排行