模拟7题解 T1方程的解
方程的解
[扩展欧几里德]
首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况
其次就是一般情况:
首先exgcd求出ax+by=GCD(a,b)的一组任意解
然后两边同乘(c/GCD)使x,y成为原方程的一组任意解,
剩下讲解见代码
#include<iostream>
#include<cstdio>
#include<cmath>
#define int long long
using namespace std;
const int mx=;
int read()
{
int f=,x=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f*x;
}
int exgcd(int a,int b,int &x,int &y)
{
if(!b){x=,y=;return a;}
int d=exgcd(b,a%b,x,y);
int tmp=x;x=y;y=tmp-(a/b)*y;
return d;
}
int a,b,c;
int ans;
void work()
{
//特判出现0的情况
if(a==&&b==&&c==){ans=mx+;return;}
if(a==&&b==&&c!=){ans=;return;}
if(a==||b==)
{
if(c==) {ans=;return;}
if(a==) swap(a,b);
if(a*c<){ans=;return;}
a=abs(a),c=abs(c);
if(c%a==){ans=mx+;return;}
else {ans=;return;}
}
//特判ab与c异号
if(a>&&b>&&c<=){ans=;return;}
if(a<&&b<&&c>=){ans=;return;}
//特判a,b异号
int x,y;
int d=exgcd(a,b,x,y);
if(c%d){ans=;return;}
if(a*b<){ans=mx+;return;}//注意这两行代码顺序,反例3 -3 5:应先进行上一步判定c%d!=0
//abc同号时,可以先处理a==b==1和a+b==c两种特殊情况,拿到部分分
if(a<) a=-a,b=-b,c=-c,d=-d;
/* if(a==1&&b==1)
{
if(c>=2) ans=c-1;
else ans=0;
return;
}
if(a+b==c) {ans=1;return;}*/
//再处理一般情况
ans=;
x*=(c/d),y*=(c/d);//x,y成为原方程的一组特解
a/=d,b/=d,c/=d;//系数约分后使GCD(a,b)==1
x=(x%b+b)%b;//使得x成为符合条件的最小正整数,,通过+b避免负数
if(x==) x+=b;//注意x为0的特殊情况
int ymax=(c-a*x)/b;//x最小时求出y的最大值
y=(y%a+a)%a;
if(y==) y+=a;//同理求y的最小值
ans=(ymax-y)/a+;//对于ymin->ymax之间的y,对应的x可能不是整数,所以/a成为x是整数的个数,因为包括两端,所以+1
return;
}
signed main()
{
int T=read();
while(T--)
{
a=read(),b=read(),c=read();
work();
if(ans>mx) puts("ZenMeZheMeDuo");
else printf("%lld\n",ans);
}
}
模拟7题解 T1方程的解的更多相关文章
- 模拟4题解 T1礼物
T1 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次, ...
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- HGOI NOIP模拟4 题解
NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...
- 【洛谷】xht模拟赛 题解
前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- vijosP1371 方程的解
vijosP1371 方程的解 链接:https://vijos.org/p/1371 [思路] 组合公式+快速幂+高精单精. 求x^x %1000:因为x最大为2^31-1所以用快速幂在O(logx ...
- 方程的解_NOI导刊2010提高
方程的解 给定x,求\(a_1+a_2+...+a_k=x^x\ mod\ 1000\)的正整数解解的组数,对于100%的数据,k≤100,x≤2^31-1. 解 显然x是可以快速幂得到答案的,而该问 ...
- P1771 方程的解_NOI导刊2010提高(01)
P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...
- 【Java例题】4.4使用牛顿迭代法求方程的解
4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...
随机推荐
- 03. 将pdb调试文件包含到.vsix包中
vs插件如何把pdb文件打包进去,方便记录日志和调试 <PropertyGroup> <CopyLocalLockFileAssemblies>true</CopyLoc ...
- PAT甲级——A1088 Rational Arithmetic
For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate the ...
- eval(str)函数
转载:地址于http://blog.csdn.net/SeeTheWorld518/article/details/47983511 eval(str)函数很强大,官方解释为:将字符串str当成有效的 ...
- Microsoft store打不开,解决办法
1.打开电脑,点击左下角的图标开始,然后找到设置选项,也可以直接使用快捷键win+i: 2.在弹出的新页面中有很多选项功能,找到并且点击”网络和Internet“选项: 3.查看网络连接方式,如果是宽 ...
- Appium环境安装步骤 + 代码验证环境是否成功
1.安装Microsoft .NET Framework 4.5 检测本机已安装的程序中,是否已经安装Microsoft .NET Framework 4.5及以上的版本. 如下图所示: 如果没有 ...
- css3之文本text-overflow 与 word-wrap, word-break
CSS3 Text Overflow属性 CSS3文本溢出属性指定应向用户如何显示溢出内容 语法: text-overflow:clip | ellipsis 但是text-overflow只是用来说 ...
- Python学习之--python概要
1 Python的优点 Python语言类库齐全,语法简洁,而且在linux上自带安装,在处理大数据以及自动化方面有其独有的特点.2 Python的解释器 Python解释器用来解释python代码, ...
- 2018-10-31-win10-uwp-使用-asp-dotnet-core-做图床服务器客户端
title author date CreateTime categories win10 uwp 使用 asp dotnet core 做图床服务器客户端 lindexi 2018-10-31 14 ...
- C/C++常考基础面试题(更新)
题目来自牛客网 解析部分来自牛客网 https://www.nowcoder.com/4685265 一 分析下面代码有什么问题? void test1() { char string[10]; ch ...
- 一条sql获取每个类别最新的一条记录
1.初始化数据 create table Products ( id ,), name ), categroy int, addtime datetime , ) insert into Produc ...