哈希--hdu1496
来源:互联网 发布:文字播音软件 编辑:程序博客网 时间:2024/06/03 18:19
给定[-50,50]的a,b,c,d,x1,x2,x3,x4位于[-100,100],a * x1^ 2 + b * x2 ^ 2 + c * x3 ^ 2 + d * x4 ^ 2 = 0,的可能数。
由于a * x1 &^ 2 + b * x2 ^ 2最多只可能有 1e4个值,用哈希可以减小数组,可以减少初始化的时间。否则需要开2e6的数组。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespacestd;
const int maxn =50021;//质数。//最多1e4个数
int f[maxn];
int g[maxn];//g[t]用来记录f[t]记录的key
int w[100 +1];
int Hash(int k)//**
{
int t = k %maxn;
if(t <0) t +=maxn;
while(f[t] !=0 &&g[t] != k) t = (t +1) %maxn;//**
return t;
}
int main()
{
for (int i =1; i <=100; i ++) {
w[i] = i * i;
}
int a,b,c,d;
while (scanf("%d%d%d%d",&a,&b,&c,&d) !=EOF) {
if(a >0 && b >0 && c >0 && d >0){printf("0\n");continue;}
if(a <0 && b <0 && c <0 && d <0){printf("0\n");continue;}
memset(f,0,sizeof(f));
int k =0,p =0;
for (int i =1; i <=100; i ++) {
for (int j =1; j <=100; j ++) {
k = a * w[i] + b *w[j];
p = Hash(k);
f[p] ++;g[p] = k;
}
}
int ans =0;
for (int i =1; i <=100; i ++) {
for (int j =1; j <=100; j ++) {
p = Hash( - c *w[i] - d *w[j]);//
ans += f[p];
}
}
printf("%d\n",ans *16);
}
return0;
}
- 哈希--hdu1496
- hdu1496
- HDU1496
- HDU1496--Equations
- HDU1496(hash)
- hdu1496 hash
- hdu1496(hash)
- HDU1496 Equations
- Equations hdu1496(hash)
- hdu1496 Equations Hash
- hdu1496 Equations (hash)
- hdu1496 Equations(哈希表)
- hdu1496 打表
- HDU1496:Equations(二分)
- hdu1496 Equations(hash表)
- hdu1496—Equations(枚举)
- hdu1496(用hash思想统计数目)
- hdu1496 equation(较好的hash)
- Nginx--Session共享问题
- ZOJ 2770 Burn the Linked Camp(差分约束)
- 动态规划之0-1背包问题
- 第十三周 【项目1
- UML中的关系
- 哈希--hdu1496
- Balking Pattern
- Keras, NLP相关
- fabric源码解析21——撇开的一笔
- java-Random类
- 11.24~25数据结构题解及总结
- 如何更改工程内最少的代码修改系统UISwitch的大小和样式
- 插入排序
- arm工作模式——异常和中断使用方法