計蒜客 蒜頭君倒水

2021-09-14 05:05:33 字數 1329 閱讀 4928

問題描述

蒜頭君倒了 2 杯熱水在杯子裡面,第一杯裡面有 a 毫公升,第二杯裡面有 b 毫公升。水太熱了,蒜頭君決定通過輪流倒水的方式來讓水冷下來。每次倒水蒜頭君把第一杯的 x%的水倒入第二杯,把第二杯的 y% 的水倒入第一杯(蒜頭君有奇特的方法,能讓這一過程是同是發生的,沒有先後之分),蒜頭君一直重複倒水,求倒了 k 次以後 2個杯子的水的容量。 

輸入格式

第 1 行輸入 2 個正整數 a,b(0≤a,b≤10^8)  

第 2 行輸入 2 個正整數 x,y(0≤x,y≤100), 

第 3 行輸入乙個整數 k(1≤k≤10^9) 

輸出格式

輸入 2 個浮點數,用空格隔開,分表表示第一杯水和第二杯水的容量(毫公升),輸出結果誤差在10^−2以內都可以接受。 

樣例輸入 

10 10 

50 50 

10000 

樣例輸出 

10.00 10.00

--------------------- 

解題思路:同時倒水隱含可以用矩陣快速冪,先寫出表示式

#includeusing namespace std;

typedef long long ll;

ll nn=2;

struct matrix;

matrix matrix_mul(matrix a,matrix b)

} }return c;

}matrix unit()

else

}} return res;

}matrix pow_matrix(matrix a,ll y)

temp=matrix_mul(temp,temp);

} return res;

}int main()

*/ double xx=x*1.0/100,yy=y*1.0/100;

matrix a;

a.a[0][0]=1-xx;

a.a[0][1]=yy;

a.a[1][0]=xx;

a.a[1][1]=1-yy;

matrix b=pow_matrix(a,k);

/*for(int i=0;i<2;i++)

cout<}*/

double aa=b.a[0][0]*a+b.a[0][1]*b;

double bb=b.a[1][0]*a+b.a[1][1]*b;

printf("%.2f %.2f\n",aa,bb);

return 0;

}

計蒜客習題 蒜頭君倒水

推出轉移矩陣 1 xyx1 y begin 1 x y x 1 y end 1 xx y1 y 之後的就很顯然了 倒了幾次就是求轉移矩陣的幾次冪 然後乘上原矩陣 ab begin a b end ab 即可 傳送門注意矩陣乘法不滿足交換律 includeusing namespace std dou...

蒜頭君面試 計蒜客

蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n nn 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數 n 1 n 100000 n 1 le n le 100000 n 1 n 1000 ...

計蒜客 蒜頭君回家

樣例輸入 8 10 p.p t s 樣例輸出 思路用兩次bfs,第一次計算出起點到p的距離,第二次計算出t到p的距離,然後迴圈取最小值。但是wa了很多次,找了很久,發現是vis判斷的問題,導致乙個資料更新多次。ac include include include include using name...