2057. [ZLXOI2015]殉国
★☆?? 輸入文件:BlackHawk.in?? 輸出文件:BlackHawk.out?? 評(píng)測(cè)插件
時(shí)間限制:0.05 s?? 內(nèi)存限制:256 MB
【題目描述】
正義的萌軍瞄準(zhǔn)了位于南極洲的心靈控制器,為此我們打算用空襲摧毀心靈控制器,然而心靈控制器是如此強(qiáng)大,甚至能緩慢控制飛行員。一群勇敢的士(feng)兵(zi)決定投彈后自殺來(lái)避免心靈控制。然而自殺非常痛苦,所以萌軍指揮官?zèng)Q定到達(dá)目的地后讓飛機(jī)沒(méi)油而墜落(也避免逃兵)。軍官提供兩種油:石油和中國(guó)輸送來(lái)的地溝油,剛開始飛機(jī)沒(méi)有油,飛機(jī)可以加幾桶石油和幾桶地溝油(假設(shè)石油和地溝油都有無(wú)限桶),飛機(jī)落地時(shí)必須把油耗盡,已知一桶石油和一桶地溝油所能支撐的飛行距離分別為a,b,駕駛員們必須飛往一個(gè)目的地,總距離為c.
1.最少,最多需要加幾桶油,若只有一種方案,最少和最多的是相同的.
2.總共有多少種不同的加油配方(死法)能到達(dá)目的地。
【輸入格式】
只有一行,三個(gè)正整數(shù)a,b,c
【輸出格式】
兩行,第一行為最少加幾次油和最多加幾次油,
第二行為加油方法總數(shù)。
若不存在任何方法,第一行輸出-1 -1
第二行輸出0
【樣例輸入】
樣例1: 2 3 10 樣例2: 6 8 10【樣例輸出】
樣例1: 4 5 2 樣例2: -1 -1 0【提示】
樣例解釋:
樣例一:飛機(jī)加兩次石油,兩次地溝油,總次數(shù)為4,2*2+3*3=10
飛機(jī)加五次石油,不加地溝油,總次數(shù)為5,2*5+3*0=10
總共兩種
樣例二:飛機(jī)無(wú)法到達(dá)目的地
數(shù)據(jù)范圍:
對(duì)于10%的數(shù)據(jù),a<=103,b<=103,c<=103
對(duì)于20%的數(shù)據(jù),a<=104,b<=104,c<=106
對(duì)于50%的數(shù)據(jù),a<=109,b<=109,c<=109
對(duì)于100%數(shù)據(jù),a<=3?1018,b<=3?1018,c<=3?1018
三個(gè)答案分值權(quán)重分別為20%,30%,50%
【來(lái)源】
?
這個(gè)題就是個(gè)擴(kuò)展歐幾里得的裸題,也不算太裸,因?yàn)樯婕暗角笞钚≈岛妥畲笾档膯?wèn)題
但是自己寫了一個(gè)交上去爆零,后來(lái)看了看比人寫的代碼,發(fā)現(xiàn)還是懵逼在45—49行里。。
4546貌似是求最大區(qū)間,,但是為什么要/b/a呢?x為什么要加負(fù)號(hào)呢??
還有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
總結(jié)
以上是生活随笔為你收集整理的2057. [ZLXOI2015]殉国的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 统计学习-方法论
- 下一篇: 10601 - Cubes(Ploya)