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;
}

Download