POJ 1840 Eqs hash
2011-07-28 22:47
441 查看
题意:解方程组a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 ,x属于[50,50]且x!=0输入a1,a2,a3,a4,a5,输出一共有多少种满足方程的解。
题解:左右分开,hash
题解:左右分开,hash
#include <iostream> using namespace std; #define prime 14999 int cube[105], hash[prime][100], a[6]; void get_cube() { int t = -1; for( int i = -50; i <= 50; i++ ) { if ( i == 0 ) continue; cube[++t] = i*i*i; } } void get_hash() { int sum, temp, i, j, k; for ( i = 0; i < 100; ++i ) { for ( j = 0; j < 100; ++j ) { k = 0; sum = -(cube[i]*a[1] + cube[j]*a[2]); temp = sum % prime; if ( temp < 0 ) temp += prime; while ( hash[temp][k] != -1 ) ++k; hash[temp][k] = sum; } } } int eqs () { int i, j, k, h; int sum, temp, ans = 0; for ( i = 0; i < 100; ++i ) for ( j = 0; j < 100; ++j ) for ( k = 0; k < 100; ++k ) { sum = cube[i]*a[3] + cube[j]*a[4] + cube[k]*a[5]; temp = sum % prime; if ( temp < 0 ) temp += prime; h = 0; while ( hash[temp][h] != -1 ) { if ( hash[temp][h] == sum ) ++ans; ++h; } } return ans; } int main() { memset(cube,0,sizeof(cube)); memset(hash,-1,sizeof(hash)); for ( int i = 1; i <= 5; ++i ) scanf("%d",a+i); get_cube(); get_hash(); printf("%d\n",eqs()); return 0; }
相关文章推荐
- POJ 1840 Eqs [HASH]
- POJ 1840 Eqs (Hash)
- POJ1840: Eqs(hash问题)
- POJ题目1840 Eqs(hash)
- poj 1840 Eqs (hash)
- poj 1840 Eqs (Hash)
- POJ 1840 Eqs.cpp 【 Hash 】
- hdu 题目1496 Equations , POJ 题目1840 Eqs (整数Hash)
- poj-1840 Eqs(hash)
- poj 1840 Eqs , hash
- Poj 1840 Eqs(Hash)
- POJ 1840 Eqs(hash)
- POJ-1840 Eqs Hash
- HDU-1496-Equations && POJ-1840-Eqs (hash)
- POJ 1840 Eqs(简单hash入门)
- POJ 1840 Eqs (hash)
- [POJ 1840]Eqs[hash][枚举]
- POJ 1840 Eqs(枚举+HASH)
- POJ 1840Eqs(hash)
- poj 1840 Eqs 【hash】