JZOJ 3018. 【NOIP2012模拟10.9】电费结算

题目

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 300

Sample Output

350
 

Data Constraint

 
 

Hint

    20%的数据,A和B都不超过10^6。

    100%的数据,1 ≤ A, B ≤ 10^9。

分析

   二分一下电量就okkk

 

代码

 1 #include<iostream>
 2 #define LL long long
 3 using namespace std;
 4 long long f[4][2]={{100,2},{10000,3},{1000000,5},{10000000000,7}}; 
 5 LL count1(int x)
 6 {
 7     if (x<=100)
 8         return x*2;
 9     else
10         if (x<=10000)
11             return 200+(x-100)*3;
12         else
13             if (x<=1000000)
14                 return 200+29700+(x-10000)*5;
15             else
16                 return 200+29700+990000*5+(x-1000000)*7;
17 }
18 int main ()
19 {
20     LL a,b,c;
21     cin>>a>>b;
22     if (a<=200)
23         c=a/2;
24     else
25         if (a<=29900)
26             c=100+(a-200)/3;
27         else
28             if (a<=5249000)
29                 c=10000+(a-29900)/5;
30             else
31                 c=1000000+(a-4979900)/7;
32     LL l=0,r=c;
33     while (l<=r)
34     {
35         LL mid=(l+r)/2;
36         LL ll=count1(mid),rr=count1(c-mid);
37         if (ll-rr==b)
38         {
39             cout<<rr;
40             return 0;
41         }
42         else if (ll-rr<b) l=mid-1;
43         else if (ll-rr>b) r=mid+1;
44     }
45 }

 

 

posted @ 2019-04-12 22:12  Melted_czj  阅读(152)  评论(0编辑  收藏  举报
body { background-color:whitesmoke; } // 修改背景颜色为半透明 #home,#sideBarMain>div,#blog-sidecolumn>div>div,.catListView{ background-color:rgba(255,255,255,0); } // 修改其他边框的颜色