POJ 1840 Eqs(hash)
题意 输入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;
}
Description
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
Output
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)的更多相关文章
- poj 1840 Eqs (hash)
题目:http://poj.org/problem?id=1840 题解:http://blog.csdn.net/lyy289065406/article/details/6647387 小优姐讲的 ...
- POJ 1840 Eqs 二分+map/hash
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...
- POJ 1840 Eqs
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15010 Accepted: 7366 Description ...
- POJ 1840 Eqs 解方程式, 水题 难度:0
题目 http://poj.org/problem?id=1840 题意 给 与数组a[5],其中-50<=a[i]<=50,0<=i<5,求有多少组不同的x[5],使得a[0 ...
- POJ 1840 Eqs(乱搞)题解
思路:这题好像以前有类似的讲过,我们把等式移一下,变成 -(a1*x1^3 + a2*x2^3)== a3*x3^3 + a4*x4^3 + a5*x5^3,那么我们只要先预处理求出左边的答案,然后再 ...
- poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 6851 Description ...
- POJ 1840 Eqs 暴力
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The ...
- 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, ...
- POJ 1840 HASH
题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...
随机推荐
- 開關(switch)規格中,SPDT, DPDT, 3PDT, 4PDT是什麼意思?
Reference http://blog.xuite.net/auster.lai/twblog/433393966 開關(switch)用來控制電路的開與閉,機械式的switc內部是由接點開關.彈 ...
- C#图解教程学习笔记——转换
一.什么是转换转换(conversion)是指接受一个类型的值并使用它作为另一个类型的等价值的过程.转换后的值应和源值是一样的,但其类型为目标类型. 二.隐式转换和显式转换(强制转换)1. 隐式转换( ...
- (二)docker的部署安装,配置,基础命令
一.docker 的安装部署 这里不过多介绍,下面这两个linux发型版 安装可以参考 ubuntu的 docker-ce安装 centos7的 docker-ce安装 二.docker配置文件 重要 ...
- luogu P2949 [USACO09OPEN]工作调度Work Scheduling
题目描述 Farmer John has so very many jobs to do! In order to run the farm efficiently, he must make mon ...
- AbstractAdvisingBeanPostProcessor---spring aop 处理器
开局一张图,我们先上张图 类的说明和继承关系/** * Base class for {@link BeanPostProcessor} implementations that apply a * ...
- Difference between a Hard Link and Soft (Symbolic) Link
Within the Unix/Linux file system, linking lets you create file shortcuts to link one or more files. ...
- 2013年9月29日 iOS 周报
新闻 Apple Tech Talks 2013 在中国上海的iOS Tech Talks活动将于11月12日展开,活动主要针对iOS 7.活动分为App开放日和游戏开放日,主要内容可查看链接.当你看 ...
- nginx +uwsgi + django配置
一 安装 nginx 二 安装 uwsgi ,pip install uwsgi 三 配置nginx 打开 nginx.conf文件, location / { # root html; # ind ...
- SilverLight-DataConversion: 银光数据转换
ylbtech-SilverLight-DataConversion: 银光数据转换 1.A, Silverlight字符串格式表 1.B, 价格格式转换器 1.C, 日期时间格式转换器 1.D, 图 ...
- 转: 低延迟系统的Java实践
from: http://blog.csdn.net/jacktan/article/details/41177779 在很久很久以前,如果有人让我用Java语言开发一个低延迟系统,我肯定会用迷茫的 ...