hd1496---->这道题是水水的数论吗?
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1496
题意:
a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.
It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.
Determine how many solutions satisfy the given equation.
这道题很水吗? 然而小恪并不这么认为, 可能是小恪太水啦!。 虽然此题思路很简单, 但是却有两个技巧值得学习!(也许机智的你, 早已熟知这两个技巧)。
第一步: 变换公式 --> a*x1^2+b*x2^2=-c*x3^2-d*x4^2 (好像变换的很白痴, 好像并没有什么卵用!)
第二步: 我们定义一个常数 shift 则: -->a*x1^2+b*x2^2+shift=-c*x3^2-d*x4^2+shift。(好像更没什么卵用!,,,,,,)
第三步: 直接看代码, 你就会明白。会明白这题虽然简单但是真的很机智!
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; const int MAXN = 2e6+;
const int shift = 1e6;
int f[MAXN]; int main()
{
int a, b, c, d;
while(cin>>a>>b>>c>>d)
{
int i, j, k, ans = ;
if(a<&&b<&&c<&&d<||a>&&b>&&c>&&d>)
{
cout<<<<endl; continue;
}
memset(f, , sizeof(f));
for(i=; i<=; i++)
for(j=; j<=; j++)
f[a*i*i+b*j*j+shift]++;
for(i=; i<=; i++)
for(j=; j<=; j++)
ans+=f[-c*i*i-d*j*j+shift];
cout<<ans*<<endl;
}
return ;
} /*
数论,
变换公式-->a*x1^2+b*x2^2=-c*x3^2-d*x4^2-->a*x1^2+b*x2^2+shift=-c*x3^2-d*x4^2+shift。
分别枚举x1,x2用哈希表记录左式的所有值,再相同方法哈希右式,将相同的值得哈希值加入答案即可。
由于值可能为负,会数组溢出,所以加个偏移值shift
*/
代码中的f[]竟然就是哈希表, 看来哈希表也不全是复杂的哦! 这个哈希表好亲民啊, 而且用的好机智。另外 shift 用的也好机智哦!
hd1496---->这道题是水水的数论吗?的更多相关文章
- vjudge Trailing Zeroes (III) (二分答案 && 数论)
嗯... 题目链接:https://vjudge.net/contest/318956#problem/E 这道题是二分答案+数论,但首先是数论,否则你不知如何二分... 首先关于一个阶乘的结果最后会 ...
- POJ1061青蛙的约会
Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事 ...
- codevs 1200:同余方程
题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Description 输入只有一行,包含两个正整数 a, b,用 一个 空 ...
- AtCoder Beginner Contest 151 题解报告
总的来说,这次的题目比较水,然而菜菜的我并没有把所有题目都做完,话不多说,直接来干货: A:Next Alphabet 题目链接:https://atcoder.jp/contests/abc151/ ...
- HDU 3449 依赖背包
这道题虽然水水的,但是还是成功地给我增加了10多个WA. 最开始拿着题,一看,依赖背包嘛~直接DFS树形DP嗨起来,甚至连内存都没有算一下,3MLE: 然后又仔细看了一下题,没有必要用树形背包来做嘛, ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- 【56测试】【字符串】【dp】【记忆化搜索】【数论】
第一题:神秘大门 大意: 两个字符串A,B,按字典序最大的顺序输出B 的每个字符在A 中的位置,如果B不全在A中,输出No,否则Yes. 解: 这道题就是一遍的扫描,因为要按字典序最大的输出,所以从后 ...
- 数论 UVA 10780
数论题目.有关内容:整数质因数分解,N的阶乘质因数分解,整除的判断. 这道题的题意是给你两个数n.m,要求你求出n!所能整除的m^k的最大值的k是多少. 由于数据范围:1<m<5000,1 ...
随机推荐
- Akka.NET
https://github.com/akkadotnet Akka是什么? 可扩展的分布式实时事务处理 编写正确的并发,容错和可扩展的应用程序是太难了.大多数时候,这是因为我们使用了错误的工具和错误 ...
- for DEMO
举例一: [xiluhua@vm-xiluhua][~/shell_script]$ cat forDemo1.sh #======================================== ...
- 手机抓包软件Charles安装使用实例 (流媒体播放测试可去下载的时刻检测)
手机抓包软件Charles安装使用实例 浏览:5258 发布日期:2015/07/17 分类:技术分享 关键字: 手机抓包软件 Charles 大胡子的博客Charles安装使用实例 Charle ...
- http://www.cnblogs.com/xqin/p/4862849.html
一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...
- mysql高可用之PXC(Percona XtraDB Cluster)
简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...
- css缩写
颜色: 16进制的色彩值为六位数,如果每两位的值相同,可以缩写一半. 如:#000000=#000: #223344=#234: 盒子的尺寸: 如margin:value; 一个值表示所有边,两个值表 ...
- git 基本命令
(命令总结内容来自 博客园 圣骑士Wind的博客) git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git ...
- 通过spring工厂读取property配置文件
/** * Created by ywq on 2016/6/30. */ @Named public class PropertyConfig { private static AbstractBe ...
- File和URL的getPath()方法区别
java.io.File对象的getPath()方法返回文件的全路径名.如果是目录返回目录路径且结尾没有"\".如果是文件包含文件名. java.io.File对象的getName ...
- android FragmentPagerAdapter getItem方法没有执行
转自 http://blog.csdn.net/getchance/article/details/40263505 在一个 Android 应用中,我使用 FragmentPagerAdapter ...