题意  输入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. java 去html标签,去除字符串中的空格,回车,换行符,制表符

    public static String getonerow(String allLine,String myfind)     {                           Pattern ...

  2. cookie、session、localStorage、sessionStorage区别

    cookie.session 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份 ...

  3. react Native 运行报错之一 gradle-2.14.1-all解压失败的问题

    在react-native run-android  时 可能出现压缩包不成功的情况,原因是压缩包失败,需要手动解压到相应目录, 目录:C:\Users\Administrator\.gradle\w ...

  4. Java多线程总结之由synchronized说开去

    更新完毕,结贴,以后有新的想法再开新帖 这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify() JMM与synch ...

  5. python 编程模型

    数据模型(译)   image.png 1 对象(object).类型(type)和值(value) python中所有的数据都是通过对象(object)或者对象之间的关系来表示 每个对象(objec ...

  6. 转:IAdaptable & IAdapterFactory

    IAdaptable & IAdapterFactory在Eclipse中使用IAdaptable接口的方式有两种 在Eclipse中使用IAdaptable接口的方式有两种1:某个类希望提供 ...

  7. iptables 一些有用的规则

      -A INPUT -i lo -j ACCEPT #允许本机内部访问,即回环 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允许 ...

  8. Windows Server 2008 IE 无法调整安全级别

    开始”/“程序”/“管理工具”/“服务器管理器”命令,在弹出的服务器管理器窗口中,找到“安全信息”设置项,单击其中的“配置IE ESC”选项,打开如下图所示的IE增强安全配置窗口.

  9. ios修改hosts文件后访问网址114导航域名无法解析问题

    当前的问题是打开hosts文件转换成utf8格式浏览发现前面有@之类的非法字符,手动修改后可以访问.

  10. 卸载django

    首先找到django安装路径 Python import sys; sys.path = sys.path[1:]; import django; print(django.__path__) 得到 ...