BILL - Hóa đơn tiền điện
Tác giả: happyboy99x
Ngôn ngữ: C++
#include <cstdio>
typedef long long LL;
LL x, y;
int moneyTokWh(int money) {
int res = 0;
if( money > 497990000 ) {
res += (money - 497990000)/700;
money = 497990000;
}
if( money > 2990000 ) {
res += (money - 2990000)/500;
money = 2990000;
}
if( money > 20000 ) {
res += (money - 20000)/300;
money = 20000;
}
res += money/200;
return res;
}
LL kWhToMoney( int kwh ) {
if(kwh <= 100) return (LL) kwh * 200;
if(kwh <= 10000) return (LL) 20000 + (kwh-100)*300;
if(kwh <= 1000000) return (LL) 2990000 + (kwh-10000)*500;
return (LL) 497990000 + (kwh-1000000)*700;
}
int main() {
scanf("%lld%lld",&x,&y);
x = moneyTokWh(x);
int L = 0, H = x;
while(L <= H) {
int mid = (L+H)/2;
int a = kWhToMoney(x-mid) - kWhToMoney(mid);
if( a == y ) {
printf("%lld\n",kWhToMoney(mid));
return 0;
}
if( a < y ) H = mid-1;
else L = mid+1;
}
return 0;
}