POJ1840---公式

简介: POJ1840---公式

题目描述

考虑具有以下形式的方程:

a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0

系数被赋予区间 [-50,50] 中的整数。

考虑一个解一个系统 (x1, x2, x3, x4, x5) 来验证方程,xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5 }.


确定有多少解满足给定的方程。

输入

输入的唯一一行包含 5 个系数 a1、a2、a3、a4、a5,以空格分隔。

输出

输出将在第一行包含给定方程的解数。

样本输入

37 29 41 43 47

样本输出

654


思路分析:直接暴力必定超时,我们可以对方程进行变形.


9694c78ef0734e05ac432e7238a8f11d.png


这样100^5的复杂度就变成了100 ^3 + 100 ^ 2.

然后将等式从左或右的值枚举存入哈希表,由于可能存在负值我们让负值+25000000转为正数,并且保证数值的唯一性.之后再暴力枚举另一边,将哈希表对应的值存入ans进行累加,最后得到ans的值.

并且25000000数组很大,int不可以,short足够,并且要定义成全局.


AC代码

//POJ1840
#include<iostream>
#include<string.h>
using namespace std;
const int maxsize = 25000000+10;// 
short hashTab[maxsize];
int a1,a2,a3,a4,a5,ans,temp;
int main()
{
  while(cin>>a1>>a2>>a3>>a4>>a5){
    ans = 0;
    memset(hashTab,0,sizeof(hashTab));
    for(int x1 = -50;x1<=50;x1++){
      for(int x2 = -50;x2<=50;x2++){
        if(x1==0||x2==0){
          continue;
        }
        temp = (a1*x1*x1*x1+a2*x2*x2*x2)*(-1);
        if(temp < 0){
          temp += maxsize;
        }
        hashTab[temp]++;
      }
    }
    for(int x3 = -50;x3<=50;x3++){
      for(int x4 = -50;x4<=50;x4++){
        for(int x5 = -50;x5<=50;x5++){
          if(x3==0||x4==0||x5==0){
            continue;
          }
          temp = a3*x3*x3*x3+a4*x4*x4*x4+a5*x5*x5*x5;
          if(temp < 0){
            temp += maxsize;
          }
          ans += hashTab[temp];
        }
      }
    }
    cout<<ans<<endl;
  }
  return 0;
}
相关文章
|
测试技术
|
算法
动态规划---数字三角形模型(一)
AcWing算法提高课内容,本文讲解 动态规划
129 0
动态规划---数字三角形模型(一)
|
算法
动态规划---数字三角形模型(二)
AcWing算法提高课内容,本文讲解 动态规划
114 0
动态规划---数字三角形模型(二)
数论 + 公式 - HDU 4335 What is N?
What is N?  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4335   Mean:  给你三个数b、P、M,让你求有多少个n满足下式。
860 0
数学 --- 高斯消元 POJ 1830
开关问题  Problem's Link: http://poj.org/problem?id=1830   Mean:  略 analyse: 增广矩阵:con[i][j]:若操作j,i的状态改变则con[i][j]=1,否则con[i][j]=0。
975 0
数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum  Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704   Mean:  给定一个大整数N,求1到N中每个数的因式分解个数的总和。
1050 0
|
Java
组合数学 - 母函数的运用 + 模板 --- hdu : 2082
找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4093    Accepted Submission(s): 2933 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。
1055 0