POJ 1840 Eqs
2016-03-05 18:36
417 查看
题目门
【题意】题意非常简单,问你能找到多少个x,满足a1x13+ a2x23+
a3x33+ a4x43+
a5x53=0 。
【解题思路】如果是暴力枚举的话,复杂度高达100^5,明显不符合时限要求,故而考虑先枚举两项的和,然后枚举3项的和,然后统计在这些项中存在多少种相等的情况。说白了,就是简单hash,或者枚举+二分。
【AC代码】我这里写了个hash版本的,因为正在学习奇妙的hash。
【题意】题意非常简单,问你能找到多少个x,满足a1x13+ a2x23+
a3x33+ a4x43+
a5x53=0 。
【解题思路】如果是暴力枚举的话,复杂度高达100^5,明显不符合时限要求,故而考虑先枚举两项的和,然后枚举3项的和,然后统计在这些项中存在多少种相等的情况。说白了,就是简单hash,或者枚举+二分。
【AC代码】我这里写了个hash版本的,因为正在学习奇妙的hash。
int a[100008][10]={0}; int top[100008]={0}; int main() { int a1,a2,a3,a4,a5,t,sum=0,p; int x1,x2,x3,x4,x5; scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5); for(x1=-50;x1<=50;x1++) { if(!x1)continue; for(x2=-50;x2<=50;x2++) { if(!x2) continue; t=a1*x1*x1*x1+a2*x2*x2*x2; p=t; t%=mq; if(t<0) t+=mq; a[t][top[t]++]=p; } } 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; t=-(a3*x3*x3*x3+a4*x4*x4*x4+a5*x5*x5*x5); p=t; t%=mq; if(t<=0) t+=mq; for(int i=0;i<top[t];i++) if(a[t][i]==p) sum++; } } } printf("%d\n",sum); return 0; }
相关文章推荐
- 1256 乘法逆元
- 关于java访问权限修饰词
- fibonacci
- React 入门实例教程 12个demo
- codeblocks单步调试简单操作
- 广播和多播
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
- java动态代理
- 从零开始学习EasyDarwin(RTSP连接监听初始化)
- Android 读Excel 精简函数封装利用了jxl.jar
- 网页字体大小标准
- 多示例学习 multiple instance learning (MIL)
- 关于error file: /boot/grub/i386-pc/normal.mod not found. Grub Rescue的修复问题
- Java Nio 九、Java NIO SocketChannel
- UIPickerView(loading...)
- OpenCASCADE Ring Type Spring Modeling
- 坚持~
- hdoj 1027 Ignatius and the Princess II(全排列变形)
- edittext常用总结;界面中有多个edittext,如何让默认第二个获取焦点
- CF 474F 线段树