题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间

直接暴力的话肯定会超时的   100的五次方  10e了都    然后能够考虑将等式变一下形   把a1*x1^3+a2*x2^3移到右边   也就是-(a1*x1^3+a2^x2^3)=a3*x3^3+a4*x4^3+a5*x5^3

考虑到a1*x1^3+a2^x2^3的最大值50*50^3+50*50^3=12500000  这个数并不大  能够开这么大的数组把每一个结果出现的次数存下来   又由于结果最小可能是负的12500000   负数不能做数组的下标   加上个12500000*2即可了   这样分别枚举左右两边   把左边出现过的结果都存在一个数组里面    再枚举右边   没出现一次结果  答案就加上前面这个结果出现的次数
   枚举完就出现答案了

#include<cstdio>
#include<cstring>
using namespace std;
const int maxs = 50 * 50 * 50 * 50 * 4 + 10;
unsigned short cnt[maxs];
int main()
{
int a1, a2, a3, a4, a5, sum,ans=0;
scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
for (int x1 = -50; x1 <= 50; ++x1)
{
if (x1 == 0) ++x1;
for (int x2 = -50; x2 <= 50; ++x2)
{
if (x2 == 0) ++x2;
sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
if (sum < 0) ++cnt[sum + maxs];
else ++cnt[sum];
}
} for (int x3 = -50; x3 <= 50; ++x3)
{
if (x3 == 0) ++x3;
for (int x4 = -50; x4 <= 50; ++x4)
{
if (x4 == 0) ++x4;
for (int x5 = -50; x5 <= 50; ++x5)
{
if (x5 == 0) ++x5;
sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
if (sum < 0) sum += maxs;
ans += cnt[sum];
}
}
}
printf ("%d\n", ans);
return 0;
}
Eqs

Description

Consider equations having the following form: 

a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 

The coefficients are given integers from the interval [-50,50]. 

It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}. 



Determine how many solutions satisfy the given equation. 

Input

The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.

Output

The output will contain on the first line the number of the solutions for the given equation.

Sample Input

37 29 41 43 47

Sample Output

654

还实用hashmap做的  空间优化了不少

#include<iostream>
#include<cstdio>
#include<cstring>
#include<hash_map>
using namespace std;
int first[50*50*50+10];
int ecnt,w[10005],v[10005],nex[10005]; void add(int x)
{
int t=(x+50*50*50*100)/200,flag=1;
for(int e=first[t];(~e)&&flag;e=nex[e])
{
if(v[e]==x)
{
flag=0,w[e]++;
}
}
if(flag)
{
w[ecnt]=1;
v[ecnt]=x;
nex[ecnt]=first[t];
first[t]=ecnt++;
}
}
int getcnt(int x)
{
if(x>50*50*50*50*2||x<-50*50*50*50*2)return 0;
int t=(x+50*50*50*100)/200;
for(int e=first[t];(~e);e=nex[e])
{
if(v[e]==x)return w[e];
}
return 0;
}
int main()
{
int a1, a2, a3, a4, a5, sum,ans=0;
scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
memset(first,-1,sizeof first);
ecnt=0;
for (int x1 = -50; x1 <= 50; ++x1)
{
if (x1 == 0) ++x1;
for (int x2 = -50; x2 <= 50; ++x2)
{
if (x2 == 0) ++x2;
sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
add(sum);
}
}
for (int x3 = -50; x3 <= 50; ++x3)
{
if (x3 == 0) ++x3;
for (int x4 = -50; x4 <= 50; ++x4)
{
if (x4 == 0) ++x4;
for (int x5 = -50; x5 <= 50; ++x5)
{
if (x5 == 0) ++x5;
sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
ans +=getcnt(sum);
}
}
}
printf ("%d\n", ans);
return 0;
}

POJ 1840 Eqs(hash)的更多相关文章

  1. poj 1840 Eqs (hash)

    题目:http://poj.org/problem?id=1840 题解:http://blog.csdn.net/lyy289065406/article/details/6647387 小优姐讲的 ...

  2. POJ 1840 Eqs 二分+map/hash

    Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...

  3. POJ 1840 Eqs

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 15010   Accepted: 7366 Description ...

  4. POJ 1840 Eqs 解方程式, 水题 难度:0

    题目 http://poj.org/problem?id=1840 题意 给 与数组a[5],其中-50<=a[i]<=50,0<=i<5,求有多少组不同的x[5],使得a[0 ...

  5. POJ 1840 Eqs(乱搞)题解

    思路:这题好像以前有类似的讲过,我们把等式移一下,变成 -(a1*x1^3 + a2*x2^3)== a3*x3^3 + a4*x4^3 + a5*x5^3,那么我们只要先预处理求出左边的答案,然后再 ...

  6. poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 6851 Description ...

  7. POJ 1840 Eqs 暴力

      Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The ...

  8. Eqs - poj 1840(hash)

    题意:对于方程:a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 ,有xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}. 现在给出a1,a2,a3, ...

  9. POJ 1840 HASH

    题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...

随机推荐

  1. Spring Boot学习——AOP编程的简单实现

    首先应该明白一点,AOP是一种编程范式,是一种程序设计思想,与具体的计算机编程语言无关,所以不止是Java,像.Net等其他编程语言也有AOP的实现方式.AOP的思想理念就是将通用逻辑从业务逻辑中分离 ...

  2. AC日记——【模板】KMP字符串匹配 洛谷 3375

    题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百度搜[ ...

  3. 笔记-迎难而上之Java基础进阶8

    函数式接口 函数式接口:有且只有一个抽象方法的接口,(可以包含其他默认,静态,私有方法) //函数式接口的使用,创建一个函数式接口 public interface FunctionalInterfa ...

  4. 全栈一路坑(4)——创建博客的API

    上一篇博客:全站之路一路坑(3)——使用百度站长工具提交站点地图 这一篇要搭建一个API平台,一是为了给博客补充一些功能,二是为以后做APP提供数据接口. 首先需要安装Django REST Fram ...

  5. ORACLE SQL*PLUS环境变量设置及说明

    1:查看当前用户的环境设置: SQL> define DEFINE _DATE " (CHAR) DEFINE _CONNECT_IDENTIFIER = "updb&quo ...

  6. PostgreSQL 10.0 preview 功能增强

    https://yq.aliyun.com/users/1384833841157402?spm=5176.100239.blogrightarea51131.3.yI7e9d

  7. FORM标准默认时间区间处理

    WHEN-NEW-FORM-INSTANCE DECLARE    temp_date         date;    client_timezone   date;    char_date    ...

  8. 【java】安全加密MessageDigest的功能及用法【hash一致性算法】

    链接地址:https://blog.csdn.net/ma1kong/article/details/2662997 1.查看MessageDigest源码的注释说明 2.和hash一致性算法 什么关 ...

  9. Oracle rac配置Weblogic数据源(实例名及URL的选择)

    这几天,应用程序后台一直报无法取得连数据库接池.但之前从来没有这个问题,迁移到Weblogic后才发生. 之后据了解,我们服务器上的Oracle 10G 是 RAC 的,即有两个节点. 两个节点 IP ...

  10. python super 的正确理解

    http://www.jb51.net/article/87807.htm super指的是MRO中的下一个类