zoukankan      html  css  js  c++  java
  • 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 }

     

    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    django 一对多操作
    django 单表常用操作
    element-ui
    vue与后台交互之post用法
    pip换国内源
    TCP/UDP的理解
    进程/线程/协程的理解
    《手牵手带你走进python世界》系列四
    《手牵手带你走进python世界》系列五
    《手牵手带你走进python世界》系列三
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10698962.html
Copyright © 2011-2022 走看看