2057. [ZLXOI2015]殉国
★☆?? 輸入文件:BlackHawk.in?? 輸出文件:BlackHawk.out?? 評測插件
時間限制:0.05 s?? 內(nèi)存限制:256 MB
【題目描述】
正義的萌軍瞄準了位于南極洲的心靈控制器,為此我們打算用空襲摧毀心靈控制器,然而心靈控制器是如此強大,甚至能緩慢控制飛行員。一群勇敢的士(feng)兵(zi)決定投彈后自殺來避免心靈控制。然而自殺非常痛苦,所以萌軍指揮官決定到達目的地后讓飛機沒油而墜落(也避免逃兵)。軍官提供兩種油:石油和中國輸送來的地溝油,剛開始飛機沒有油,飛機可以加幾桶石油和幾桶地溝油(假設石油和地溝油都有無限桶),飛機落地時必須把油耗盡,已知一桶石油和一桶地溝油所能支撐的飛行距離分別為a,b,駕駛員們必須飛往一個目的地,總距離為c.
1.最少,最多需要加幾桶油,若只有一種方案,最少和最多的是相同的.
2.總共有多少種不同的加油配方(死法)能到達目的地。
【輸入格式】
只有一行,三個正整數(shù)a,b,c
【輸出格式】
兩行,第一行為最少加幾次油和最多加幾次油,
第二行為加油方法總數(shù)。
若不存在任何方法,第一行輸出-1 -1
第二行輸出0
【樣例輸入】
樣例1: 2 3 10 樣例2: 6 8 10【樣例輸出】
樣例1: 4 5 2 樣例2: -1 -1 0【提示】
樣例解釋:
樣例一:飛機加兩次石油,兩次地溝油,總次數(shù)為4,2*2+3*3=10
飛機加五次石油,不加地溝油,總次數(shù)為5,2*5+3*0=10
總共兩種
樣例二:飛機無法到達目的地
數(shù)據(jù)范圍:
對于10%的數(shù)據(jù),a<=103,b<=103,c<=103
對于20%的數(shù)據(jù),a<=104,b<=104,c<=106
對于50%的數(shù)據(jù),a<=109,b<=109,c<=109
對于100%數(shù)據(jù),a<=3?1018,b<=3?1018,c<=3?1018
三個答案分值權重分別為20%,30%,50%
【來源】
?
這個題就是個擴展歐幾里得的裸題,也不算太裸,因為涉及到求最小值和最大值的問題
但是自己寫了一個交上去爆零,后來看了看比人寫的代碼,發(fā)現(xiàn)還是懵逼在45—49行里。。
4546貌似是求最大區(qū)間,,但是為什么要/b/a呢?x為什么要加負號呢??
還有ans1,ans2的b-a是什么鬼。。
啊啊啊啊啊啊為什么為什么為什么。。。。。。
=.=
?
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<vector> 6 #include<map> 7 #define LL long long 8 using namespace std; 9 LL a,b,c,x,y; 10 LL read(LL & n) 11 { 12 int flag=0,x=0;char c='/'; 13 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} 14 while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar(); 15 if(flag)n=-x; 16 else n=x; 17 } 18 LL gcd(LL a,LL b) 19 { 20 if(b==0)return a; 21 else return gcd(b,a%b); 22 } 23 LL exgcd(LL a,LL b,LL &x ,LL & y) 24 { 25 if(b==0) 26 {x=1;y=0;return a;} 27 LL r=exgcd(b,a%b,x,y); 28 LL tmp=x;x=y;y=tmp-(a/b)*y; 29 return r; 30 } 31 int main() 32 { 33 //freopen("BlackHawk.in","r",stdin); 34 //freopen("BlackHawk.out","w",stdout); 35 //read(a);read(b);read(c); 36 cin>>a>>b>>c; 37 LL p=gcd(a,b); 38 if(c%p!=0) 39 { 40 printf("-1 -1\n0"); 41 return 0; 42 } 43 exgcd(a,b,x,y); 44 // printf("%d %d",x,y); 45 LL xx=ceil((long double)-x/b*c); 46 LL yy=floor((long double)y/a*c); 47 LL ans=yy-xx+1; 48 LL ans1=x*c/p+y*c/p+(b-a)/p*yy; 49 LL ans2=x*c/p+y*c/p+(b-a)/p*xx; 50 if(ans<=0) printf("-1 -1\n0"); 51 else cout<<min(ans1,ans2)<<" "<<max(ans1,ans2)<<endl<<ans; 52 return 0; 53 }?
轉(zhuǎn)載于:https://www.cnblogs.com/zwfymqz/p/6896283.html
總結
以上是生活随笔為你收集整理的2057. [ZLXOI2015]殉国的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统计学习-方法论
- 下一篇: 10601 - Cubes(Ploya)