

POJ 1840 - Eqs
source link: https://exp-blog.com/algorithm/poj/poj1840-eqs/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

- POJ 1840 - Eqs
- Time: 5000MS
- Memory: 65536K
- 难度: 初级
- 分类: 高效查找法
给出一个5元3次方程,输入其5个系数,求它的解的个数
其中系数 ai∈[-50,50]
自变量 xi∈[-50,0)∪(0,50]
注意 : 若
x1=a, x2=b, x3=c, x4=d, x5=e
时,与x1=b, x2=a, x3=c, x4=d, x5=e
代入方程后都得到值0,那么他们视为不同的解。
直观的思路:暴力枚举,O(n^5)
题目Time Limit=5000ms,1ms大约可以执行1000条语句,那么5000ms最多执行500W次
每个变量都有100种可能值,那么暴力枚举,5层循环,就是要执行100^5=100E次,等着TLE吧。。。。
要AC这题,就要对方程做一个变形:


即先枚举x1和x2的组合,把所有出现过的 左值 记录打表,然后再枚举x3 x4 x5的组合得到的 右值,如果某个右值等于已经出现的左值,那么我们就得到了一个解
时间复杂度从 O(n^5)降低到 O(n^2+n^3),大约执行100W次
我们先定义一个映射数组 hash[]
,初始化为0
对于方程左边,当 x1=m
, x2=n
时得到sum,则把用 hash[]
记录sum : hash[sum]++
,表示sum这个值出现了1次。
之所以是记录“次数”,而不是记录“是否已出现”,
是因为我们不能保证函数的映射为 1对1 映射,更多的是存在 多对1映射。
例如当 a1=a2
时,x1=m
, x2=n
我们得到了sum,但 x1=n
, x2=m
时我们也会得到sum,但是我们说这两个是不同的解,这就是 多对1 的情况了,如果单纯记录sum是否出现过,则会使得 解的个数 减少。
其次,为了使得 搜索sum是否出现 的操作为o(1),我们把sum作为下标,那么hash数组的上界就取决于a1 a2 x1 x2的组合,四个量的极端值均为50
因此上界为 50*50^3+50*50^3=12500000
,由于sum也可能为负数,因此我们对 hash[]
的上界进行扩展,扩展到25000000,当 sum<0
时,我们令 sum+=25000000
存储到 hash[]
由于数组很大,必须使用全局定义。
同时由于数组很大,用int定义必然会MLE,因此要用char或者short定义数组,推荐short。
//Memory Time
//49188K 532MS
#include<iostream>
using namespace std;
short hash[25000001]; //hash[sum]表示值等于sum的的解的个数(多对1映射)
int main(void)
{
int a1,a2,a3,a4,a5; //系数
while(cin>>a1>>a2>>a3>>a4>>a5)
{
memset(hash,0,sizeof(hash));
for(int x1=-50;x1<=50;x1++)
{
if(!x1)
continue;
for(int x2=-50;x2<=50;x2++)
{
if(!x2)
continue;
int sum=(a1*x1*x1*x1 + a2*x2*x2*x2)*(-1);
if(sum<0)
sum+=25000000;
hash[sum]++;
}
}
int solution=0;
for(int x3=-50;x3<=50;x3++)
{
if(!x3)
continue;
for(int x4=-50;x4<=50;x4++)
{
if(!x4)
continue;
for(int x5=-50;x5<=50;x5++)
{
if(!x5)
continue;
int sum=a3*x3*x3*x3 + a4*x4*x4*x4 + a5*x5*x5*x5;
if(sum<0)
sum+=25000000;
if(hash[sum])
solution+=hash[sum];
}
}
}
cout<<solution<<endl;
}
return 0;
}
Recommend
-
10
奔驰EQS:电动车的新标杆?本视频作者:李大锤同学我们提前体验到了奔驰首款纯电平台的电动车 — 奔驰 EQS。在我看来,EQS 是奔驰里程碑式的一款车,代表着奔驰电动车领域的方向。那么究竟 EQS 好不好?这块 141cm 的超大屏幕怎么样...
-
6
1840 年的意式冰淇淋什么样? 08:05
-
5
地表最豪华电动车?奔驰EQS正式上市|皆电 地表最豪华电动车?奔驰EQS正式上市 新车 发布于:2021-12-18 00:54:35 如果每一代奔驰S级更新发布,都能引领燃油车时代的一次变革,奔驰S级也因此成为奔...
-
7
EQ+S等于豪华电动车?打榜测试奔驰EQS|皆电 EQ+S等于豪华电动车?打榜测试奔驰EQS 打榜 发布于:2022-04-14 10:07:54 最近,奔驰官方公布了EQXX概念车的路试数据,该车以87.4km/h的平均时速完成了...
-
9
hyperscreen is back — Mercedes-Benz’s next EV is this 7-seater EQS SUV A crowd-pleasing, American-made SUV follows Mercedes' first two electric sedans.
-
2
奔驰EQS SUV发布 坐稳纯电SUV NO.1交椅?|皆电 奔驰EQS SUV发布 坐稳纯电SUV NO.1交椅? 新车 发布于:2022-04-19 19:43:28 4月19日,奔驰发布了全新的EQS SUV,新车为EQ系列基于EVA纯电平台旗下...
-
4
宝马i7实车图首曝!能否与EQS扳手腕?|皆电 宝马i7实车图首曝!能否与EQS扳手腕? 新车 发布于:2022-04-20 14:03:04 近日,网上流传一组宝马全新i7的实车图片,从图片中我们看出,全新i7延续了宝...
-
6
The 10 Coolest Features Of The 2023 Mercedes-Benz EQS SUV
-
7
June 29, 2022 ...
-
7
Mercedes Prices Up Its 2023 EQS SUV And It's One Expensive Electric Car ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK