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 ...
随机推荐
- SHELL用法三(变量及参数设置)
京峰JF2115-Day45上课笔记 1.SHELL编程变量命名规范: 变量分为:系统变量.环境变量.用户变量: 定义变量时使用=赋值,无需通过declare定义变量的类型: 变量赋值时,=前后是不能 ...
- cas单点登录打包时下载慢!
环境:win10 百度网盘下载 版本: cas-overlay-template-5.3 提取码 d1b6 添加阿里的到pom.xml 注意添加到第一列 <!--阿里云仓库--& ...
- <JZOJ4726>种花
挺有意思的贪心 神奇的贪心 #include<cstdio> #include<iostream> #include<cstring> #include<al ...
- JAVA WEB期末项目第二阶段成果
我们做的系统是一个基于Java web与MySQL的食堂订餐系统 班级: 计科二班 小组成员:李鉴宣.袁超 1.开发环境 开发编辑器使用:Visual Studio Code 数据库使用:MySQL8 ...
- web压测工具http_load
1.什么是http_loadhttp_load是一款基于Linux平台的web服务器性能测试工具,用于测试web服务器的吞吐量与负载,web页面的性能. 2.http_load的安装1)下载地址:ht ...
- Linux设置redis密码登录
第一种:永久方式 redis设置密码访问 你的redis在真是环境中不可以谁想访问就可以访问,所以必须要设置密码 设置密码的流程如下: vim /etc/redis.conf 找到 #require ...
- 算法笔记-Day_01(1001 害死人不偿命的(3n+1)猜想
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...
- 2018.2最新-Scrapy+elasticSearch+Django打造搜索引擎(二)
请问您今天要来个引擎吗? 工欲善其事必先利其器 最终项目上线演示地址: http://search.mtianyan.cn 第二节:我们搞搞比利,搞搞环境的搭建.Github地址: https://g ...
- rsync 增量同步总是多两行数据
从google云机器rsync日志到本地,并通过logstash格式化后存入elasticsearch,但在实施过程中发现,每次rsync后通过查看elasticsearch,都会将上次已同步的数据再 ...
- Tornado 简述
前言 python 旗下,群英荟萃,豪杰并起.单是用于 web 开发的,就有 webpy.web2py.bottle.pyramid.zope2.flask.tornado.django 等等,不一而 ...