电费结算
Description
WZK最近靠租房發家致富了。作為WZK老同學的你也要租房,于是WZK決定不要房租,但是電費還得付。以下是用電價格: 舉個例子吧。如果你用電為10123千瓦時,那么要付2 * 100 + 3 * 9900 + 5 * 123 = 30515塊錢(好貴)。 到結算電費的日子了,可是WZK家里只有一個總電表,也就是統計你和WZK總共用的電量。 但是WZK有辦法告訴你以下信息: 1).如果按照總電表來看要交給供電局的錢A。(也就是兩個人用電量加起來一起算錢) 2).你和WZK如果分開付的話,你們付的錢的差值B。 現在你想知道如果你單獨算錢的話,需要付多少錢。當然,你的用電量不會比WZK多。 舉個例子:如果你們一起算錢要付1100,并且如果分開來算,你們的差值是300的話,那么你用了150kwh,WZK用了250kwh。讓我們來驗算一下:你們一共用電400kwh,所以要付2 * 100 + 3 * 300 = 1100,你單獨要付2 * 100 + 3 * 50 = 350,WZK單獨要付2 * 100 + 3 *?150 = 650。所以最后,你只需要告訴我你單獨要付350元。
Input
輸入僅一行,包含兩個整數A和B(1 ≤ A, B ≤ 10^9),含義同上。 輸出描述: 輸出僅一行一個整數,代表你單獨算需要付的錢。數據保證解唯一。
Output
輸出僅一行一個整數,代表你單獨算需要付的錢。數據保證解唯一。Sample Input
1100 300Sample Output
350思路:一道二分題,先算出兩人一共花費的用電量
再二分用電量,原因是由于具有單調性
貼上代碼(寫的丑勿怪)
const c1=200; c2=29700; c3=4950000; var a,b,sum1,sum2,s,pre,re,mid,i,j,k,n:longint; function solve(x:longint):longint; beginif x<=c1 thenexit(x div 2);if x<=c1+c2 thenexit((x-c1) div 3+100);if x<=c1+c2+c3 thenexit((x-c1-c2) div 5+10000);exit((x-c1-c2-c3) div 7+1000000); end; function sum(x:longint):longint; beginif (x<=100) thenexit(x*2);if (x<=10000) thenexit((x-100)*3+c1);if (x<=1000000) thenexit((x-10000)*5+c1+c2);exit((x-1000000)*7+c1+c2+c3) end; beginread(a,b);pre:=0;s:=solve(a);re:=s;while pre<re dobeginmid:=(pre+re) div 2;sum1:=sum(mid);sum2:=sum(s-mid);if sum2-sum1=b thenbeginwriteln(sum1);halt;endelseif sum2-sum1>b thenpre:=mid+1else re:=mid;end; end. View Code
?
?轉載于:https://www.cnblogs.com/fhlxpyz/p/6024392.html
總結
- 上一篇: Android 检查设备是否存在 导航栏
- 下一篇: 版本控制工具Git 常用操作命令