P5596 【XR-4】题 笔记
P5596 【XR-4】题
其实这题我昨天没做出来……所以今天写一下笔记
昨天我还信誓旦旦地说这一定是一道黑题\(OTZ\)。果然菜是原罪。
另外吐槽一下科技楼机房频繁停电,昨天写了两小时的树刨和倍增全没了
题目描述
小 X 遇到了一道题:
给定自然数 \(a,b\)求满足下列条件的自然数对 \((x,y)\) 的个数:
\(y^2 - x^2 = ax + b\)
他不会,只好求助于精通数学的你。
如果有无限多个自然数对满足条件,那么你只需要输出 \(inf\) 即可。
输入格式
一行两个整数 \(a,b\)。
输出格式
如果个数有限,一行一个整数,表示个数。
如果个数无限,一行一个字符串 \(inf\)。
题解
\(y^2 - x^2 = ax + b\)
\(x^2 + ax + b = y^2\)
最朴素的第一想法一定是移项
刚开始想了一下求两函数交点,但是似乎不好搞,而且当时等号右边的方程还写错了
窝太菜了\(QWQ\)
然后正解应该是配一下方(如果我当时没有去想狗屎枚举……
\((x + \frac{1}{2}a)^2 + b - \frac{1}{4}a^2 = y ^ 2\)
这个式子就比较好看了,两个异号平方数,还有一项是常数,一定可以用平方差公式
\((x + \frac{1}{2}a)^2 - y ^ 2 = \frac{1}{4}a^2 - b\)
\((2x + 2y + a) * (2x - 2y + a) = a^2 - 4b\)
接着就可以暴力枚举了???
并不,直接枚举情况有、、多。
又因为题干中说数对\(( x, y) \geqslant 0\),所以\((2x+2y+a)\geqslant0\)。
那么我们就可以根据\(a^2 - 4b\)的情况来确定\((2x - 2y +a)\)的正负性,进而加快枚举速度。
当\(a^2 - 4b\)大于零枚举时需要判断:
- x是否为正整数,即\((2x + 2y + a) + ( 2x - 2y + a) - 2a\) 是否是4的正整数倍;
- y是否为正整数,即\((2x + 2y + a) - ( 2x - 2y + a)\) 是否是4的正整数倍;
当\(a^2 - 4b\)小于零枚举时需要判断:
- x是否为正整数,即\((2x + 2y + a) - ( 2y - 2x - a) - 2a\) 是否是4的正整数倍;
- y是否为正整数,即\((2x + 2y + a) + ( 2y - 2x - a)\) 是否是4的正整数倍;
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define rint register int
#define ll long long
ll a, b; //十年OI一场空,不开longlong见祖宗
int ans;
int main( void ){
scanf( "%lld%lld", &a, &b );
//cout << a << b;
ll delta;
delta = a * a - 4 * b;
//cout << temp;
if( delta == 0 ){
cout << "inf";
return 0;
}
//下面注意判断正负性,看哪个是i,哪个是j
if( delta >= 0ll ){
for( ll i = 1ll; i * i <= delta; i++ ){
if( delta % i ) continue;
if( ( delta / i + i - 2 * a ) % 4 != 0 || ( delta / i + i - 2 * a ) < 0 ) continue;
if( ( delta / i - i ) % 4 != 0 || ( delta / i - i ) < 0 ) continue;
ans++;
}
} else {
delta *= -1;
for( ll i = 1ll; i * i <= delta; i++ ){
if( delta % i ) continue;
if( ( delta / i - i - 2 * a ) % 4 != 0 || ( delta / i - i - 2 * a ) < 0 ) continue;
if( ( delta / i + i ) % 4 != 0 ) continue;
ans++;
}
}
printf( "%d", ans );
return 0;
}
看来数学还是得好好学啊(小声\(BB\)
P5596 【XR-4】题 笔记的更多相关文章
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
- SDOI2017 R1做题笔记
SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30
- SDOI2014 R1做题笔记
SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(
- SDOI2016 R1做题笔记
SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...
- 二级C语言真题笔记
二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() { short i ...
- 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
- LCT做题笔记
最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...
- java做题笔记
java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...
- Python 刷题笔记
Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...
随机推荐
- UFT基本操作
1.打开界面F6快捷录制 2.选择web或者C/S架构软件 3.以C/S为例,点击添加找到相应的地址 4.点击左键添加断点 5.切换视图,初级模式或者代码模式 6.新增步骤 7.点击“手指”图标获取元 ...
- WordPress快速打造个人博客
前些天用wordpress搭建了现在这个博客,所以总结了一篇文章,讲讲怎么样简单的创建一个博客.开始前这里有篇我搭建时所遇到的问题可以作为参考<WordPress建站注意事项>,首先我们要 ...
- 吴裕雄--天生自然python学习笔记:Python3 SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...
- 多线程并发 了解 Thread
通过上一篇 多线程并发 (一) 了解 Java 虚拟机 - JVM 了解了java 虚拟机的构成以及对象的创建等.从Java虚拟机栈我们知道每当我们创建一个线程JVM就会给我们的线程分配一个私有的内存 ...
- js如何把a标签里面的值传递到函数里面
----------------------a标签如何定 如何传参到函数---------------------- 1.<a></a>标签 如何传参到函数 <a cla ...
- 引入 JPEGCodec;JPEGImageEncoder; 图片处理;MyEclipse编译时报错处理
在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JP ...
- Python---12函数式编程------12.3匿名函数&装饰器&偏函数
一.匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f( ...
- O2O疯狂烧钱路:止血还是放血好
在国内,无论是互联网巨头还是创业者,很多都将O2O领域当做下一个金矿.而对于很多O2O项目来说,市场规模.用户基数.发展潜力等传统指数依然被当做硬性指标.而为了抢夺用户,很多O2O项目都只能疯狂烧钱, ...
- PHP RFI 的小tip
有关PHP include的帖子网上已经很多了,wooyun的知识库里面也有一篇总结的很好的文章,传送门:http://drops.wooyun.org/tips/3827,今晚在看书的时候看到RFI ...
- 下一个风口?迷你KTV能变成“绿巨人”吗
近段时间,在全国各地多个商场.大学城等繁华地点,一种全新娱乐方式--迷你KTV变得火爆起来.这种仅能容纳两三人,以单首.时段等进行计费,且价格不低的点唱新模式,正成为投资者眼中的"新宠&qu ...