BILL - Hóa đơn tiền điện
Tác giả: skyvn97
Ngôn ngữ: C++
#include<stdio.h>
typedef unsigned long long ull;
ull x,y,l,m,r,a,b;
ull cost(ull a)
{
if (a<=100) return (200*a);
if (a<=10000) return (300*a-10000);
if (a<=1000000) return (500*a-2010000);
return (700*a-202010000);
}
int main(void)
{
scanf("%llu",&x);
scanf("%llu",&y);
l=0;
r=x;
while (true)
{
if (l==r)
{
if (cost(l)==x) {a=l;break;}
}
if (r-l==1)
{
if (cost(l)==x) {a=l; break;}
if (cost(r)==x) {a=r; break;}
}
m=(l+r)/2;
if (cost(m)==x)
{
a=m;
break;
}
if (cost(m)>x) r=m-1;
if (cost(m)<x) l=m+1;
}
l=0;
r=a/2;
while (true)
{
if (l==r)
{
if (cost(a-l)-cost(l)==y) {b=l;break;}
}
if (r-l==1)
{
if (cost(a-l)-cost(l)==y) {b=l;break;}
if (cost(a-r)-cost(r)==y) {b=r;break;}
}
m=(l+r)/2;
if (cost(a-m)-cost(m)==y)
{
b=m;
break;
}
if (cost(a-m)-cost(m)>y) l=m+1;
if (cost(a-m)-cost(m)<y) r=m-1;
}
printf("%llu",cost(b));
}