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\)大于零枚举时需要判断:

  1. x是否为正整数,即\((2x + 2y + a) + ( 2x - 2y + a) - 2a\) 是否是4的正整数倍;
  2. y是否为正整数,即\((2x + 2y + a) - ( 2x - 2y + a)\) 是否是4的正整数倍;

当\(a^2 - 4b\)小于零枚举时需要判断:

  1. x是否为正整数,即\((2x + 2y + a) - ( 2y - 2x - a) - 2a\) 是否是4的正整数倍;
  2. 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】题 笔记的更多相关文章

  1. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  2. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  3. SDOI2017 R1做题笔记

    SDOI2017 R1做题笔记 梦想还是要有的,万一哪天就做完了呢? 也就是说现在还没做完. 哈哈哈我竟然做完了-2019.3.29 20:30

  4. SDOI2014 R1做题笔记

    SDOI2014 R1做题笔记 经过很久很久的时间,shzr又做完了SDOI2014一轮的题目. 但是我不想写做题笔记(

  5. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  6. 二级C语言真题笔记

    二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() {     short i ...

  7. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  8. LCT做题笔记

    最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...

  9. java做题笔记

    java做题笔记 1. 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序 ...

  10. Python 刷题笔记

    Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...

随机推荐

  1. S2SH项目实现分页功能

    javaWEB项目实现分页的方法很多,网上也有很多列子,最近工作中S2SH框架项目中需要一个分页的功能,查看了很多用一下方式实现,功能思路很清晰,觉得是很好的一种实现方法,记录下便多学习. 刚开始得到 ...

  2. res文件夹及xml资源文件详解

    目录 一.values文件:存放字符串(strings).颜色(colors).尺寸(dimens).数组(arrays).样式(styles类似于CSS文件).类型等资源 二.drawable:存放 ...

  3. 转:zabbix 2.4.4 更换 logo

    zabbix 2.4.4 更换 logo 想把 zabbix 的 logo 改为自己公司的. 把更改过程做一下记录 先找到修改文件的目录 zabbix 版本 2.4.4 操作系统 linux 目录定位 ...

  4. Tensorflow 错误集锦

    文章目录 参考文献 本文记录笔者在Tensorflow使用上的一些错误的集锦,方便后来人迅速查阅解决问题. 我是留白. 我是留白. CreateSession still waiting for re ...

  5. ES6中的数组

    数组是js中很重要的数据类型,虽然在 ES5 中,关于数组的方法和属性很多.但为了更加简洁.高效的操作数组,ES6 中又在数组原型上和实例上新增了一些方法. 一.Array方法 1.1 Array.f ...

  6. 为什么 generator 忽略第一次 next 调用的参数值呢?

    首先要理解几个基本概念. 执行生成器不会执行生成器函数体的代码,只是获得一个遍历器 一旦调用 next,函数体就开始执行,一旦遇到 yield 就返回执行结果,暂停执行 第二次 next 的参数会作为 ...

  7. 使用hexo,创建博客

    下载hexo工具 1 npm install hexo-cli -g 下载完成后可以在命令行下生成一个全局命令hexo搭建博客可用thinkjs 创建一个博客文件夹 1 hexo init 博客文件夹 ...

  8. C++走向远洋——60(十四周阅读程序、STL中的简单容器和迭代器)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. Flutter调研(2)-Flutter从安装到运行成功的一些坑

    工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置. —— 在mac ...

  10. 【视频+图文】带你快速掌握带continue语句的双重for循环

    双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带continue语句的双重for循环. 上期双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看for循环视频~ ...