Orz

送分比较慷慨的一道题,疯狂特判能拿不少分。

对于$a>0,b>0$的情况:

用exgcd求出方程通解,然后通过操作得到最小正整数解和最大正整数解

他们以及他们之间的解满足等差数列性质,小学数奥求项数即可

(其实就是(末项-首项)/公差+1)

其他情况特判掉或者转化为可处理情况即可(比如全负),不多说,代码里写的还是比较清晰的

//#define XR
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int T,a,b,c,x,y;
//void exgcd(int a,int b,int &x) int exgcd(int a,int b,int &x,int &y,int c)
{
if(!b)
{
x=c/a;
y=;
return a;
}
int g=exgcd(b,a%b,y,x,c);
y-=a/b*x;
return g;
}
void work()
{
scanf("%d%d%d",&a,&b,&c);x=y=;
if(a==&&b==)
{
if(c==)
{
puts("ZenMeZheMeDuo");
return ;
}
else
{
puts("");
return ;
}
}
if(a==||b==)
{
long long now=a+b;
if(c==||(c%now==&&(long long)now*c>))
{
puts("ZenMeZheMeDuo");
return ;
}
else
{
puts("");
return ;
}
}
if((a>&&b>&&c<=)||(a<&&b<&&c>=)||(a>&&b>&&a+b>c)||(a<&&b<&&a+b<c))
{
puts("");
return ;
}
if(a==b&&a==)
{
if(c>)puts("ZenMeZheMeDuo");
else if(c<=)puts("");
else cout<<c-<<endl;
return ;
}
if(a+b==c)
{
puts("");
return ;
}
if(a<&&b<)a=-a,b=-b,c=-c;
int GCD=exgcd(a,b,x,y,c);//cout<<GCD<<endl;
if(c%GCD!=)
{
puts("");
return ;
} if((long long)a*b<)
{ puts("ZenMeZheMeDuo");
return ;
}
a/=GCD;b/=GCD;c/=GCD;x%=b;
while(x<=)x+=b;
y=(c-a*x)/b;
int ym=y%a;
while(ym<=)ym+=a;int ans;
if(ym>y)ans=;
else ans=(y-ym)/a+;
if(ans>)puts("ZenMeZheMeDuo");
else cout<<ans<<endl; }
void test()
{
scanf("%d%d",&a,&b);
exgcd(a,b,x,y,c);
cout<<x<<' '<<y<<endl;
}
int main()
{
// cout<<(18%(-5))<<endl;
//while(1)test();
#ifdef XR
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
scanf("%d",&T);
while(T--)work();
return ;
}

[7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)的更多相关文章

  1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

  2. poj 2142 扩展欧几里得解ax+by=c

    原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...

  3. poj 1061 扩展欧几里得解同余方程(求最小非负整数解)

    题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...

  4. 扩展欧几里得 求ax+by == n的非负整数解个数

    求解形如ax+by == n (a,b已知)的方程的非负整数解个数时,需要用到扩展欧几里得定理,先求出最小的x的值,然后通过处理剩下的区间长度即可得到答案. 放出模板: ll gcd(ll a, ll ...

  5. Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)

    一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...

  6. 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】

    Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...

  7. poj 2891 扩展欧几里得迭代解同余方程组

    Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...

  8. Acwing-203-同余方程(扩展欧几里得)

    链接: https://www.acwing.com/problem/content/205/ 题意: 求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 思路: 首先:扩展欧几里得推导 ...

  9. 扩展欧几里得(exgcd)与同余详解

    exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...

随机推荐

  1. 送礼物(二分加双向DFS)

    题目链接 题意:给你n个礼物重量,给你一个M力量,看你一次性搬动不超过M的礼物重量. 思路:看似背包,但M太大.所以要用DFS,但n也有45,所以考虑双向DFS先搜前半部分满足情况的所有重量,然后去重 ...

  2. angularjs &登录跳转

    如果要使用$location,$stateParams,那么必须有相应形参controller: function ($rootScope, $http, $scope, $state,$locati ...

  3. How do I force my .NET application to run as administrator?

    How do I force my .NET application to run as administrator? You'll want to modify the manifest that ...

  4. java.lang.String中的replace方法到底替换了一个还是全部替换了。

    你没有看错我说的就是那个最常用的java.lang.String,String可以说在Java中使用量最广泛的类了. 但是我却发现我弄错了他的一个API(也可以说是两个API),这个API是关于字符串 ...

  5. 55、saleforce 学习笔记二

    String goodsName = 'abcd1123汉字显示';//测试文本 System.debug('简化后的字符串名称为:'+goodsName.abbreviate(5)); //返回简化 ...

  6. Java学习第一次总结

    在此之前我需要声明一下,我不载过多的评论知识点的简单与难易程度.写出来只是为了方便使用,现阶段追求的是实在.㈠①自动类型转换由低到高byte.short.char→int→long→flot→doub ...

  7. leetcode.位运算.136只出现一次的元素-Java

    1. 具体题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明:你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1 ...

  8. win10 虚拟机VMware 14中CentOS7文件共享

    一,环境 主机:win10 家庭版 软件:VMware 14 系统:CentOS 7 二,设置共享文件 右键虚拟机->选择设置 如图:创建共享文件 三,安装VMware Tools 然后进入ce ...

  9. Redis哨兵机制(sentinel)

    1.简介: 1.是什么: Redis-Sentinel是Redis官方推荐的高可用(HA)方案,当用Reids 做master-slave高可用方案时,假如master宕机了,redis本身(包括它的 ...

  10. Spark使用Java读取mysql数据和保存数据到mysql

    原文引自:http://blog.csdn.net/fengzhimohan/article/details/78471952 项目应用需要利用Spark读取mysql数据进行数据分析,然后将分析结果 ...