POJ 2142——扩展欧几里得

题目是很裸的扩展欧几里得,但是对x,y有限制条件,要求所有x,y中abs(x)+abs(y)最小,在这个条件下要求abs(a* x)+abs(b* y)最小

显然我们需要用扩展欧几里得求得一组解,问题在于如何处理这组解以得到符合条件的值。

我是这样处理的:最小的两组解分别为x为最小非负整数和y为最小非负整数的情况。然后就过了,可是我想证明的时候证明了好久都没有证明成功。在网上看其他人的题解找到一种靠谱的做法时我们令a>b(如果不是这样就交换x,y,a,b),然后最小的和z=|x+b/dk|+|y-a/dk|,当后一项为正时,z随k单调减小,当后一项为负时,z随k单调增大。因此最小值在y-a/d*k=0的附近,一般应该是有两个值,比较一下。

至于为什么我的想法正确我还得再想想。不过有个小经验就是在处理出x后不要再去求k什么的再去求y,可以直接将y带入方程得到y的值。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<ctime>
#include<climits>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=1e5+5;void ex_gcd(ll a,ll b,ll& d,ll& x,ll& y)
{if(!b) {d=a; x=1; y=0;}else {ex_gcd(b,a%b,d,y,x); y-=(a/b)*x;}
}ll a,b,c;ll Abs(int x)
{return x<0?-x:x;
}int main()
{while(~scanf("%lld%lld%lld",&a,&b,&c)){ll x,y,d,k1,k2,a1,b1,k,x1,x2,y1,y2;if(!a && !b && !c) break;ex_gcd(a,b,d,x,y);  a1=a/d; b1=b/d;x=c/d*x; y=c/d*y;//printf("%lld %lld\n",x,y);x1=(x%b1+b1)%b1; y1=Abs((c-a*x1)/b);y2=(y%a1+a1)%a1; x2=Abs((c-b*y2)/a);//printf("%lld %lld\n",x1,y1);//printf("%lld %lld\n",x2,y2);if(x1+y1<y2+x2){printf("%lld %lld\n",x1,y1);}else if(x1+y1>y2+x2){printf("%lld %lld\n",x2,y2);}else{ll c1=a*x1+b*y1; ll c2=a*x2+b*y2;if(c1<c2){printf("%lld %lld\n",x1,y1);}else{printf("%lld %lld\n",x2,y2);}}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++::模板

模板的简单介绍 C中模板是为了能够使得函数或者类实现范型编程的目的, 同时C模板的出现是为了避免代码的冗余 举个例子 void Swap(int& a, int& b) {int tmp a;b a;a b; } void Swap(char& a, char& b) {char tmp a;b a;a b; } 上面的函数除了类型不…

Linux select TCP并发服务器与客户端编程

http://blog.csdn.net/szkbsgy/article/details/10558881 [cpp] view plaincopy <span style"font-size:18px;">服务端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/time.h> #i…

BZOJ - 2186 欧拉函数

题目的意思大概是求1~N!中和M&#xff01;互质的数的个数 因为对欧拉函数理解不够深刻所以我是分析得到结果的&#xff1a; 当N<M的时候显然符合要求的数的个数为0&#xff1b; 当N>M的时候我们要求的是1~N!中不含1 ~M的素因子的的数的个数&#xff0c;结合欧拉函数的…

多态相关概念

多态相关注意事项 所谓的多态就是指函数有多中状态, 在C中通常是通过父类指针指向子类对象的方法实现多态, 这样父类可以通过子类的类型调用不同的方法. 即实现一个接口多种方法, 多态的引用是为了实现接口复用 在 C中多态是通过虚函数来实现的. 子类通过对父类相关接口进行重…

模板实现栈队列以及链表

模板实现链表 //test.h #include <iostream> #include <cstdio> #include <assert.h> using namespace std;template <class T> struct ListNode {ListNode* _prev;ListNode* _next;T _data;ListNode(const T& x):_prev(NULL),_next(NULL),_data(…

基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr

http://blog.csdn.net/itcastcpp/article/details/12907371 请用C语言实现字符串的查找函数strstr&#xff0c; 找到则返回子字符串的地址&#xff0c;没有找到返回为空&#xff0c;请用数组操作与指针操作实现 看到题目想到最简单的方法就是母字符串和子字符串比较&#xff0c…

卡特兰数

卡特兰数的引入与n边形分成三角形的个数有关&#xff1a; 我们令f[n]表示n边形可以分成的三角形的个数&#xff0c;特殊的&#xff0c;令f[2]1 我们考虑以顶点1顶点的一个三角形&#xff0c;假设用的是n边形的k-k1边&#xff0c;那么这种情况的方案数就是f[k]∗f[n−k1]f[k]*…

软件测试相关概念

什么叫软件测试 软件测试就是测试产品没有错误,同时又证明软件是可以正确运行的 测试和调试的区别 调试一般都在开发期间 ,测试是伴随着整个软件的生命周期, 调试是发现程序中问题并且解决问题, 测试是发现程序中的缺陷 软件测试的目的和原则 目的:验证软件有没有问题 原…

Linux 线程信号量同步

https://www.cnblogs.com/jiqingwu/p/linux_semaphore_example.html 信号量和互斥锁(mutex)的区别&#xff1a;互斥锁只允许一个线程进入临界区&#xff0c;而信号量允许多个线程同时进入临界区。 不多做解释&#xff0c;要使用信号量同步&#xff0c;需要包含头文件semaphore.…

本原勾股数组

勾股数我们都很熟悉&#xff0c;a2b2c2&#xff0c;可是如何快速找到所有的勾股数组呢&#xff1f; 本原勾股数组a2b2c2性质&#xff1a; 1. a,b奇偶不同&#xff0c;c一定是奇数 2. 若b为偶数&#xff0c;c-b和cb一定是完全平方数 3. 设t>s>1,且均为奇数&#xff0c;则…

C++静态成员函数访问非静态成员的几种方法

https://www.cnblogs.com/rickyk/p/4238380.html 大家都知道C中类的成员函数默认都提供了this指针&#xff0c;在非静态成员函数中当你调用函数的时候&#xff0c;编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C灵活性下面&#xff0c;类还具备了静态成员和静…

费马大定理

当n>3时方程 xnynzn没有正整数解 结论很简洁&#xff0c;刚才看了一下证明的历史&#xff0c;我勒个去。。。。

类中的静态成员函数访问非静态成员变量

http://blog.csdn.net/u011857683/article/details/52294353 1.思路&#xff1a; 静态成员函数属于类(通过类访问&#xff0c;调用函数时没有提供this指针)&#xff0c; 非静态成员函数属于实例&#xff08;通过对象访问&#xff09;&#xff08;默认都提供了this指针&#xf…

Pollar Rho算法

原本是想把这个算法搞懂的&#xff0c;然后在网上看了又看&#xff0c;觉得&#xff0c;还是有时间再来看吧&#xff0c;我错了。 看到了一个大佬的博客&#xff0c;顺带收集一下板子 这个板子可以求大数的最大的因子。 #define LL long long bool IsPrime(LL);//返回素性测…

小知识点总结

用户输入一个url之后到整个页面返回给客户这个过程都经历了一些什么 首先url是为了让人记忆方便的,计算机在进行网络传输的过程中只能通过ip地址找到对应的主机,所以当输入一个ip地址的时候,此时就需要找对应的url,首先从浏览器中取查找ip地址,再到系统中去查找,再到域名解析服…

C++学习之普通函数指针与成员函数指针

http://blog.csdn.net/lisonglisonglisong/article/details/38353863 函数指针&#xff08;function pointer&#xff09;是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多&#xff0c;而对指向类成员函数的函数指针则比较陌生。我最近也被问…

HDU2683——欧拉完全数

题目要求符合等式的数&#xff0c;我们首先要做的就是分析这个数&#xff1a; 对于这个等式&#xff0c;我们可能什么都看不出来&#xff0c;左边很难化简的样子&#xff0c;所以我们就要想到通过变化怎么样把右边化成和左边形式差不多的样子。结合组合数我们想到二项式定理&am…

BZOJ-2005能量采集-数论函数

很入门的数论函数题目。我还是wa了一发&#xff08;爆long long 了&#xff09; 对于每个位置x,y&#xff0c;在他们和能量采集器中间的植物为gcd(x,y)-1&#xff0c;【在他们之间说明斜率相同&#xff0c;而和他们斜率相同的就是所有gcd(x/gcd(x,y),y/gcd(x,y))1的并且比他们小…

网络五层模型

TCP/IP五层模型 应用层: HTTP,HTTPS协议,其中HTTP没有对数据进行加密操作,但是HTTPS对数据进行了加密操作 其中HTTP端口号一般是80/8080等等,HTTPS端口号是443,SSH端口号一般是22,ftp是21 HTTP协议报头: 首行:请求方法,url,协议版本 请求报头: HOST:主机 Connection:长连接…

C++的静态成员函数指针

http://blog.csdn.net/sky453589103/article/details/47276789 先简单的说说非静态的成员函数。非静态成员函数指针的类型&#xff1a;类的非静态成员是和类的对象相关的。也就是说&#xff0c;要通过类的对象来访问变量。成员函数的类型定义为&#xff1a;typedef void (A::*p…