POJ1840 Eqs ACM解题报告(打表+构造)
来源:互联网 发布:sql server 2000 网盘 编辑:程序博客网 时间:2024/05/18 01:27
这题乍一看我以为是水题,正准备5个for暴力的时候发现不对,貌似会TLE啊,于是就跪了,参考百度学习了一发哈希表,感觉也是极为精妙。特别是那个short的用法,第一次用short,也是赞
这题暴力会TLE,所以思路就是转化式子形式:
枚举左边出现的sum,然后枚举右边,这样大大的降低了复杂度,左边的sum需要打表记录,2*50^4=12500000,可能会出现负数所以得开25000000的数组,int会爆,所以要用short(ps.也是醉了,乍一看水题其实真难)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;short hash[25000001];//2*50^4=25000000;int会爆内存,第一次用shortint main(){ int a1,a2,a3,a4,a5,x1,x2,x3,x4,x5,sum; cin>>a1>>a2>>a3>>a4>>a5; memset(hash,0,sizeof(hash)); for(x1=-50;x1<=50;x1++) { if(!x1) continue; for(x2=-50;x2<=50;x2++) { if(!x2) continue; sum=a1*x1*x1*x1+a2*x2*x2*x2; if(sum<0) sum+=25000000; hash[sum]++;//打表记录可以得到的和的次数。 } } int cnt=0; for(x3=-50;x3<=50;x3++) { if(!x3) continue; for(x4=-50;x4<=50;x4++) { if(!x4) continue; for(x5=-50;x5<=50;x5++) { if(!x5) continue; sum=a3*x3*x3*x3+a4*x4*x4*x4+a5*x5*x5*x5; if(sum<-12500000) continue;//这个sum是上面的式子算不到的,要舍弃 if(sum<0&&sum>=-12500000) sum+=25000000; cnt+=hash[sum];//这个sum有这些解 } } } printf("%d\n",cnt); return 0;}
0 0
- POJ1840 Eqs ACM解题报告(打表+构造)
- POJ1840 Eqs(hash)
- POJ1840:Eqs(Hash)
- poj1840 Eqs(哈希表)
- poj1840--Eqs
- poj1840 Eqs
- poj1840 Eqs
- Eqs poj1840
- POJ1840-Eqs
- POJ1840:Eqs
- poj1840 - Eqs
- poj1840 Eqs
- POJ1840-Eqs
- poj1840 Eqs
- POJ1840--------Eqs
- [POJ1840]-Eqs
- poj1840 Eqs
- 【POJ1840】Eqs
- JavaScript中Textarea滚动条不能拖动的问题
- Apache MiNa + smack +openfilre 实现多人聊天室
- latex中argmax,argmin中下标写法
- 学习loadrnner结果分析时看见的一些资料
- 一年站长经历后的感悟
- POJ1840 Eqs ACM解题报告(打表+构造)
- TCP/IP协议 三次握手与四次挥手
- 第十七周项目4-1:日期结构体
- nagios的安装和配置
- 全球最快的JS模板引擎
- hdu1003 Max Sum 最大连续子序列
- 小波与滤波器组(2)
- 05-1. List Components (25)图的基本遍历
- Oracle笔记(3)