题意  输入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. Magenta源代码笔记(3) —— 内存管理【转】

    转自:http://blog.csdn.net/boymax2/article/details/52550197 版权声明:本文为博主原创文章,未经博主允许不得转载. Magenta内核支持虚拟地址的 ...

  2. 洛谷——P1186 玛丽卡

    P1186 玛丽卡 题目描述 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们知道 ...

  3. 10.1综合强化刷题 Day1

    a[问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx.何大爷今天为字符串定义了新的权值计算方法.一个字符串由小写字母组成,字符串的权 ...

  4. 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源

    我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...

  5. 解决 java.sql.SQLException: Before start of result set

    java中使用如下代码做数据库连接,用以查询数据 *******************我是分割线************************************* try { Class.f ...

  6. STL之pair类型具体分析

    pair定义于头文件utility中.基本的作用是将两个数据组合成一个数据,两个数据能够是同一类型或者不同类型. pair类型提供的操作: pair<T1,T2> p1; pair< ...

  7. TP框架中多条件筛选

            $pid =I('pid');         $year = I('year');         $productType = I('productType');         ...

  8. nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接

    作为一个webserver,那么肯定是有监听套接字的,这个监听套接字是用于接收HTTP请求的,这个监听套接字的创建是依据配置文件的内容来创建的,在nginx.conf文件里有多少个地址就须要创建多少个 ...

  9. Sqlserver 实际开发中表变量的用法

    在实际的开发中,我们可能遇到的问题是,在一个存储过程里面,我们可能要返回多段sql的结果集,但是最终怎么把多个结果集合成一块呢,那么这个时候临时表变量就来了 declare  @tmp table   ...

  10. solr入门之pinyin4j源代码改写动态加入扩展词及整合进war项目中

    1.初始化时载入用户定义的字典 package net.sourceforge.pinyin4j; import net.sourceforge.pinyin4j.multipinyin.Trie; ...