zoj3593 扩展欧几里德
来源:互联网 发布:淘宝给老客户发优惠券 编辑:程序博客网 时间:2024/06/06 05:02
副标题:以为可以脱非扩欧,奈何败于智商不足
题目分析
首先这个
但是解出了一个解之后是不够的,还要求最优解。
容易意会得到,如果
可以在坐标系上画出两条直线
所以呢,取一个
代码
#include<cstdio>#include<iostream>#include<cmath>#include<climits>using namespace std;#define ll long longll read(){ ll q=0,w=1;char ch=' '; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')w=-1,ch=getchar(); while(ch>='0'&&ch<='9')q=(ll)q*10+(ll)(ch-'0'),ch=getchar(); return q*w;}ll exgcd(ll a,ll b,ll &x,ll &y){ if(!b){x=1;y=0;return a;} ll d=exgcd(b,a%b,x,y),tmp; tmp=x;x=y;y=tmp-(a/b)*y; return d;}ll s,t,a,b,T,mi;int main(){ ll x,y,d,L,i; T=read(); while(T--){ s=read();t=read();a=read();b=read(); d=exgcd(a,b,x,y);L=abs(t-s); if(L%d){printf("-1\n");continue;} ll ans=LLONG_MAX,kl; x=x*(L/d);y=y*(L/d);a/=d;b/=d; mi=(y-x)/(a+b);//交点 for(i=mi-1;i<=mi+1;i++){//讨论整点 if(fabs(x+b*i)+fabs(y-a*i)==fabs(x+b*i+y-a*i)) kl=max(x+b*i,y-a*i); else kl=fabs(x-y+(a+b)*i);//是加号QAQ ans=min(ans,kl); } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- zoj3593 扩展欧几里德
- One Person Game(zoj3593+扩展欧几里德)
- ZOJ3593扩展欧几里得之线性方程
- 欧几里德和扩展欧几里德
- 欧几里德, 与 扩展欧几里德
- 欧几里德|扩展欧几里德
- 欧几里德&&扩展欧几里德详解
- 欧几里德&&扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德
- 扩展欧几里德!!!!!
- 不同进制的表现形式
- 《机器学习》读书笔记1
- JSON总结(1)
- 作业,进程组,终端
- Ubuntu下安裝NDK工具,编译JNI文件
- zoj3593 扩展欧几里德
- 使用OkHttp上传图片
- 【阿柟的复习计划】线段树-基础刷题(回炉重造)
- 补间动画
- 关于使用Git的时候出现"HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large"的解决方法
- oracle位与或等比特运算
- 个人模板 Kruskal 最小生成树
- CSDN物联网学习2 IoT应用开发平台巡礼
- 显示器 设置选项 解析