2057. [ZLXOI2015]殉国

★☆   输入文件:BlackHawk.in   输出文件:BlackHawk.out   评测插件
时间限制:0.05 s   内存限制:256 MB

【题目描述】

正义的萌军瞄准了位于南极洲的心灵控制器,为此我们打算用空袭摧毁心灵控制器,然而心灵控制器是如此强大,甚至能缓慢控制飞行员。一群勇敢的士(feng)兵(zi)决定投弹后自杀来避免心灵控制。然而自杀非常痛苦,所以萌军指挥官决定到达目的地后让飞机没油而坠落(也避免逃兵)。军官提供两种油:石油和中国输送来的地沟油,刚开始飞机没有油,飞机可以加几桶石油和几桶地沟油(假设石油和地沟油都有无限桶),飞机落地时必须把油耗尽,已知一桶石油和一桶地沟油所能支撑的飞行距离分别为a,b,驾驶员们必须飞往一个目的地,总距离为c.

1.最少,最多需要加几桶油,若只有一种方案,最少和最多的是相同的.

2.总共有多少种不同的加油配方(死法)能到达目的地。

【输入格式】

只有一行,三个正整数a,b,c

【输出格式】

两行,第一行为最少加几次油和最多加几次油,

第二行为加油方法总数。

若不存在任何方法,第一行输出-1 -1

第二行输出0

【样例输入】

样例1:
2 3 10
样例2:
6 8 10

【样例输出】

样例1:
4 5
2
样例2:
-1 -1
0

【提示】

样例解释:

样例一:飞机加两次石油,两次地沟油,总次数为4,2*2+3*3=10

飞机加五次石油,不加地沟油,总次数为5,2*5+3*0=10

总共两种

样例二:飞机无法到达目的地

数据范围:

对于10%的数据,$a<=10^3,b<=10^3,c<=10^3$

对于20%的数据,$a<=10^4,b<=10^4,c<=10^6$

对于50%的数据,$a<=10^9,b<=10^9,c<=10^9$

对于100%数据,$a<=3·10^{18},b<=3·10^{18},c<=3·10^{18}$

三个答案分值权重分别为20%,30%,50%

 /*
65分代码:寻找方法数和最大值和最小值,都是用的暴力,实在没想出其他的方法。
*/
#include<iostream>
using namespace std;
#include<cstdio>
typedef long long ll;
void exgcd(ll a,ll b,ll &x,ll &y,ll &gcd)
{
if(!b)
{
gcd=a;x=;y=;
return ;
}
exgcd(b,a%b,x,y,gcd);
ll t=x;
x=y;
y=t-(a/b)*y;
}
int main()
{
freopen("BlackHawk.in","r",stdin);
freopen("BlackHawk.out","w",stdout);
ll a,b,c,x,y,gcd,ans,minn,maxx;
cin>>a>>b>>c;
exgcd(a,b,x,y,gcd);
if(c%gcd)
{
minn=maxx=-;
ans=;
}
else
{
ll a0=a/gcd,b0=b/gcd;
ll k=c/gcd;
x*=k;y*=k;
ans=;
if(x<)
{
ll x1=-x;
x1/=b0;
x+=x1*b0;
y-=x1*a0;
if(x<) x+=b0,y-=a0;
}
if(y<)
{
ll y1=-y;
y1/=a0;
y+=y1*a0;
x-=y1*b0;
if(y<) y+=a0,x-=b0;
}
minn=maxx=x+y;
ll x2=x,y2=y;
for(;y2>=&&x2>=&&x2<=c&&y2<=c;++ans)
{
minn=min(minn,x2+y2);
maxx=max(maxx,x2+y2);
x2+=b0;
y2-=a0;
}
for(;y>=&&x>=&&x<=c&&y<=c;++ans)
{
minn=min(minn,x+y);
maxx=max(maxx,x+y);
x-=b0;y+=a0;
}
--ans;
}
if(ans==) minn=maxx=-;//
cout<<minn<<" "<<maxx<<endl<<ans;
fclose(stdin);
fclose(stdout);
return ;
}

网上的AC代码:

求exgcd,由xx=x*c/d+b/d*t≥0,yy=y*c/d−a/d*t≥0
得到t的区间[l,r]
方法数=r-l+1;
因为方程线性,所以最值在l、r取到
要写long double!!

 #include<cstdio>
#include<cmath>
#define min(x,y) x<y?x:y
#define max(x,y) x>y?x:y
using namespace std;
long long a,b,c,d,x,y,xx,yy,ans1,ans2,ans;
void exgcd(long long a,long long b,long long &d,long long &x,long long &y)
{
if(!b) d=a,x=,y=;
else exgcd(b,a%b,d,y,x),y-=x*(a/b);
}
int main()
{
freopen("BlackHawk.in","r",stdin);
freopen("BlackHawk.out","w",stdout);
scanf("%lld%lld%lld",&a,&b,&c);
exgcd(a,b,d,x,y);
if(!(c%d))
{
xx=ceil((long double)-x/b*c);
yy=floor((long double)y/a*c);
ans=yy-xx+;
ans1=x*c/d+y*c/d+(b-a)/d*yy;
ans2=x*c/d+y*c/d+(b-a)/d*xx;
}
if(ans<=) printf("-1 -1\n0");
else printf("%lld %lld\n%lld",min(ans1,ans2),max(ans1,ans2),ans);
}

扩展欧几里德算法 cogs.tk 2057. [ZLXOI2015]殉国的更多相关文章

  1. COGS——T 2057. [ZLXOI2015]殉国

    http://cogs.pro/cogs/problem/problem.php?pid=2057 ★☆   输入文件:BlackHawk.in   输出文件:BlackHawk.out   评测插件 ...

  2. cogs 2057. [ZLXOI2015]殉国

    2057. [ZLXOI2015]殉国 ★☆   输入文件:BlackHawk.in   输出文件:BlackHawk.out   评测插件时间限制:0.05 s   内存限制:256 MB [题目描 ...

  3. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  4. 欧几里德与扩展欧几里德算法 Extended Euclidean algorithm

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...

  5. poj2142-The Balance(扩展欧几里德算法)

    一,题意: 有两个类型的砝码,质量分别为a,b;现在要求称出质量为d的物品, 要用多少a砝码(x)和多少b砝码(y),使得(x+y)最小.(注意:砝码位置有左右之分). 二,思路: 1,砝码有左右位置 ...

  6. poj2115-C Looooops(扩展欧几里德算法)

    本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样.一,题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循 ...

  7. poj1061-青蛙的约会(扩展欧几里德算法)

    一,题意: 两个青蛙在赤道上跳跃,走环路.起始位置分别为x,y. 每次跳跃距离分别为m,n.赤道长度为L.两青蛙跳跃方向与次数相同的情况下, 问两青蛙是否有方法跳跃到同一点.输出最少跳跃次数.二,思路 ...

  8. HDU 1576 A/B 扩展欧几里德算法

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  9. ACM_扩展欧几里德算法

    <pre name="code" class="cpp">/* 扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表 ...

随机推荐

  1. 使用 WordPress 主题制作的20个精美网页

    WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用 PHP 语言和 MySQL 数据库开发的.用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客.这 ...

  2. css选择器中:first-child与:first-of-type的区别

    :first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素.比如有段代码: p:first-child  匹配到的是p元素,因为p元素是div的第一个子元素: ...

  3. Junit单元测试笔记

    什么是单元测试? 单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的.很明确的功能是否正确. 单元测试目的? 执行单元测试,是为了证明某段代码的行为确实和开发者所期望的一致. 白盒测试和单 ...

  4. ARCGIS server没有服务、silverlight不能调试、windows server2008安装时跳出“安装程序无法创建新的系统分区也无法定位现有的系统分区”的解决方案

    1.某个系统服务没开启 2.默认浏览器设置为IE.(IE内核有时候也不能调试) 3.BIOS里面的SATA设置为开启.

  5. iOS React-Native入门指南之HelloWorld

    React-native 作为facebook开源项目,最近是火的一塌糊涂,它采用node.js能够写ios和android的native界面代码,简直是太酷了.支持动态更新,而且appstore 提 ...

  6. linux 修改home 目录

         第一种方法:vi /etc/passwd 找到要修改的用户那几行,修改掉即可.此法很暴力,建议慎用. /etc/passwd文件格式 登录名:加密口令:数字用户ID:数字组ID:注释字段:起 ...

  7. App Transport Security has blocked a cleartext

    错误描述: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecu ...

  8. Android实用代码七段(五)

      前言  每次分享意味着每次都有进步,本系列以实用为主,欢迎和我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯 ...

  9. [转 载] android 谷歌 新控件(约束控件 )ConstraintLayout 扁平化布局

    序 在Google IO大会中不仅仅带来了Android Studio 2.2预览版,同时带给我们一个依赖约束的库. 简单来说,她是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件 ...

  10. zendstudio文件编码修改问题

    转载:http://blog.csdn.net/kunlong0909/article/details/7818620 朋友,在zendstudio ide中,你是否碰到导入一个项目后,发现项目中文件 ...