[7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)
送分比较慷慨的一道题,疯狂特判能拿不少分。
对于$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]方程的解 题解(扩展欧几里得)的更多相关文章
- 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个点,求射 ...
- poj 2142 扩展欧几里得解ax+by=c
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...
- poj 1061 扩展欧几里得解同余方程(求最小非负整数解)
题目可以转化成求关于t的同余方程的最小非负数解: x+m*t≡y+n*t (mod L) 该方程又可以转化成: k*L+(n-m)*t=x-y 利用扩展欧几里得可以解决这个问题: eg:对于方程ax+ ...
- 扩展欧几里得 求ax+by == n的非负整数解个数
求解形如ax+by == n (a,b已知)的方程的非负整数解个数时,需要用到扩展欧几里得定理,先求出最小的x的值,然后通过处理剩下的区间长度即可得到答案. 放出模板: ll gcd(ll a, ll ...
- Poj 1061 青蛙的约会(扩展欧几里得解线性同余式)
一.Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要 ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- Acwing-203-同余方程(扩展欧几里得)
链接: https://www.acwing.com/problem/content/205/ 题意: 求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 思路: 首先:扩展欧几里得推导 ...
- 扩展欧几里得(exgcd)与同余详解
exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...
随机推荐
- OC学习篇之---单例模式
在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单 ...
- sql中简单的触发器功能
触发器分为DML触发器和DDL触发器DML触发器包含After触发器,执行insert update delete语句后会触发after触发器,会事务回滚DML触发器还包含instead of触发器, ...
- bind-dns服务器搭建
环境:主服务器上IP为192.168.159.30 安装相关包bind dns服务器 bind-utils提供nslookup dig等命令 yum -y install bind bind-uti ...
- *.tar 用 tar –xvf 解压 *.gz 用 gzip -d或者gunzip 解压 *.tar.gz和*.tgz 用 tar –xzf 解压 *.bz2 用 bzip2 -d或者用bunzip2 解压 、*.tar.bz2用tar –xjf 解压
解压: 1.*.tar 用 tar –xvf 解压, --skip-old-files跳过已经存在的文件,压缩用tar -cvf 2.*.bz2 用 bzip2 -d或者用bunzip2 解压 3.* ...
- Linux C遇到的常见错误
此随笔主要记录一些Linux C遇到的常见错误,便于debug问题或自己编程时,避免发生类似的错误或问题,后续会持续更新.... 1.内存泄露问题 内存泄露是由于内存没有释放导致程序耗内存一直增大,引 ...
- Scrapy爬虫实战-爬取体彩排列5历史数据
网站地址:http://www.17500.cn/p5/all.php 1.新建爬虫项目 scrapy startproject pfive 2.在spiders目录下新建爬虫 scrapy gens ...
- ms13_055 metasploit
111 def get_payload(t) 112 if t['Rop'] == :msvcrt 113 print_status("Using msvcrt ROP") 114 ...
- C++ STL rope 可持久化平衡树 (可持久化数组)
官方文档好像 GG 了. rope 不属于标准 STL,属于扩展 STL,来自 pb_ds 库 (Policy-Based Data Structures). 基本操作: #include <e ...
- Django框架(二十)—— Django rest_framework-认证组件
目录 Django rest_framework-认证组件 一.什么是认证 二.利用token记录认证过的用户 1.什么是token 2.token的原理 3.cookie.session.token ...
- yum安装LAMP
安装LAMP环境二进制包安装,先更新yum源,PHP 7.0.33 扩展可选 yum -y install mysql mysql-server mysql-devel httpd httpd-dev ...