模拟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 ...
随机推荐
- x64:x64
ylbtech-x64:x64 “x86-64”,有时会简称为“x64”,是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品.“x86-64”1999由AMD设计,AMD首 ...
- 表单控件绑定v-model
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- ES6之主要知识点(一)
引自:http://es6.ruanyifeng.com let 块级作用域 const 1.let let声明的变量只在它所在的代码块有效. for循环的计数器,就很合适使用let命令. var a ...
- 嘴巴题8 BZOJ2318: Spoj4060 game with probability Problem
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 555 Solved: 273 [Submit][Status][Discuss] Description ...
- github的账号密码 redis windows版连接方式
账号:Pinshuducha 邮箱:java_zhoulu@163.com 密码:zhoulu1994 服务器端: 启动:redis-server.exe redis.windows.conf 客户端 ...
- linear-gradient
http://jsbin.com/mocojehosa/edit?html,css,output https://developer.mozilla.org/zh-CN/docs/Web/CSS/li ...
- oracle pl/sql远程连接过程
之前没用过oracle,现在公司用到就记录下安装过程吧.安装PL/SQL工具,安装oracle11G工具.打开PL/SQL 进行配置.
- Sql Server实现自动增长
在学习中遇到这个问题 数据库里有编号字段 BH00001 BH00002 BH00003 BH00004 如何实现自动增长 --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号. --得 ...
- Jupyter notebook使用matplotlib不出图解决办法
1.在jupyter notebook使用plot的时候没有显示图像2.在命令行知道需要使用ipython --pylab进入ipython环境才能做出图像,jupyter notebook该怎么设置 ...
- 如何把win10自带输入法改为简体中文
win10设置为中文简体 先找到win10的设置,然后下面按照图示操作,很简单 点击每一个红色的方框既能够到达---------->>>中文简体 目的地 2 会了吗,你个小傻瓜