HDU 1496 Equations 等式(二分+暴力,技巧)
题意:给出4个数字a,b,c,d,求出满足算式a*x1^2+b*x2^2+c*x3^2+d*x4^2=0的 (x1,x2,x3,x4) 的组合数。x的范围[-100,100],四个数字的范围 [-50,50] ,不能为0。
思路:对于每套给出的a,b,c,d四个数字,如果纯暴力的话要穷举100*100*100*100,每个例子要算1亿次,必须超时。可以算式左边两个部分右移,变成a*x1^2+b*x2^2 = -(c*x3^2+d*x4^2),那么只需要计算出左边的所有可能的结果,判断右边是否能否组成这个结果的取负,若存在,则组合数加1。解法,x只按照正数来穷举即可,最后的结果乘以2*2*2*2=16即可。穷举左边的所有可能,最多100*100种可能,全部结果存起来,再穷举右边所有的可能结果取负,再在左边所得结果中判断是否存在,若存在则符合。最重要的一点是:test例子中含有大量的组合数为0的例子,也就是四个数字全部大于0 或者全部小于0,是不可能的出现的,要判断,否则,你会一直处于TLE状态。
- #include <bits/stdc++.h>
- using namespace std;
- int a, b, c, d;
- int has1[];
- int has2[];
- int qq[][][][];
- int cal()
- {
- memset(has1,,sizeof(has1));
- memset(has2,,sizeof(has2));
- int ans=;
- for(int x1=; x1<=; x1++)
- for(int x2=; x2<=; x2++)
- {
- int tmp=a*x1*x1+ b*x2*x2;
- if( tmp>= )
- has1[tmp]++;
- else
- has2[-tmp]++;
- }
- for(int x3=; x3<=; x3++)
- {
- for(int x4=; x4<=; x4++)
- {
- int tmp=c*x3*x3+d*x4*x4;
- if(tmp>)
- ans+=has2[tmp];
- else
- ans+=has1[-tmp];
- }
- }
- return (ans<<);
- }
- int main()
- {
- //freopen("input.txt", "r", stdin);
- while(~scanf("%d%d%d%d",&a,&b,&c,&d))
- {
- if(a> && b> && c> && d> || a< && b< && c< && d<)
- {
- printf("0\n");
- continue;
- }
- if(!qq[a+][b+][c+][d+])
- {
- qq[a+][b+][c+][d+]=cal()+;
- }
- printf("%d\n",qq[a+][b+][c+][d+]-);
- }
- return ;
- }
AC代码
HDU 1496 Equations 等式(二分+暴力,技巧)的更多相关文章
- hdu 1496 Equations hash表
hdu 1496 Equations hash表 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 思路: hash表,将原来\(n^{4}\)降 ...
- hdu 1496 Equations
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 Equations Description Consider equations having ...
- HDU 1496 Equations(哈希表)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1496 [题目大意] 给出一个方程ax1^2+bx2^2+cx3^2+dx4^2=0,求-100到1 ...
- HDU 1496 Equations hash HDU上排名第一!
看题传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1496 题目大意: 给定a,b,c,d.a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 ...
- HDU 2588 GCD 【Euler + 暴力技巧】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2588 GCD Time Limit: 2000/1000 MS (Java/Others) Mem ...
- HDU - 1496 Equations (hash)
题意: 多组测试数据. 每组数据有一个方程 a*x1^2 + b*x2^2 + c*x3^2 + d*x4^2 = 0,方程中四个未知数 x1, x2, x3, x4 ∈ [-100, 100], 且 ...
- HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)
http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...
- 【做题】agc002D - Stamp Rally——整体二分的技巧
题意:给出一个无向连通图,有\(n\)个顶点,\(m\)条边.有\(q\)次询问,每次给出\(x,y,z\),最小化从\(x\)和\(y\)开始,总计访问\(z\)个顶点(一个顶点只计算一次),经过的 ...
- HDU 2920 分块底数优化 暴力
其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...
随机推荐
- .Net知识点总结(一)
1.文件上传:Jquery.uploadify 它依赖于flash 舍去起上传 功能 改用SWFupload 他是第三方的插件 2.验证码激活的时候,邮箱开始是写死的,但是为了以后更改邮箱 ...
- Linux多线程之同步3
需求 客户端将需要解决的task发送给服务器,服务器调用线程来解决客户端发送的task,解决完由线程负责将其发送回客户端.(用管道实现通信) 思路 1. server维护两个列表.一是客户端列表.二是 ...
- BestCoder 1st Anniversary($) 1003 Sequence
题目传送门 /* 官方题解: 这个题看上去是一个贪心, 但是这个贪心显然是错的. 事实上这道题目很简单, 先判断1个是否可以, 然后判断2个是否可以. 之后找到最小的k(k>2), 使得(m-k ...
- 如何计算一个字符串表示的计算式的值?——C_递归算法实现
在<C程序设计伴侣>的8.7.3 向main()函数传递数据这一小节中,我们介绍了如何通过main()函数的参数,向程序传递两个数据并计算其和值的简单加法计算器add.exe.这个程序,好 ...
- scp在Linux主机之间复制不用输入密码
把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中,假设本地主机linux(10.1.1.1),远程主机linux(10.1.1.2) 一,在li ...
- Head First HTML5 Programming笔记--chapter1 认识HTML5
升级到HTML5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http://www.w3.org/TR/ ...
- js浮点数的计算
js在计算浮点数时可能不够准确,会产生舍入误差的问题,这是使用基于IEEE745数值的浮点计算的通病,并非ECMAScript一家,其他使用相同数值格式的语言也存在这个问题. 这里讲一 ...
- Ubuntu 13.10 安装Qt5
Qt5在Ubuntu的软件中心是找不到的,只能从Qt的官网下载安装. http://qt-project.org/downloads,选择完整的Linux版本(qt-linux-opensource- ...
- Xlib: connection to ":0.0" refused by server Xlib: No protocol specified解决方案
Xlib: connection to ":0.0" refused by server Xlib: No protocol specified 解决办法: 1. 退出oracl ...
- Win XP 如何禁用系统的自动更新
想关闭系统的自动更新. 打开[控制面板]/[安全中心],发现“自动更新”和“更改安全中心通知我的方式”,都已成了灰色,无法更改. 网上查了一下,找到了这样一个处理方法:将[服务]中一个名为“Autom ...