Skip to main content
Original174 words1 min

题解:UVA11247 Income Tax

Summary

给定最低应税收入 m 与税率 x%,工资超过 m 的部分按 x% 收税;求最大的税前收入 v,使其税后收入仍小于收入略低于它者的税前收入。低于 m 不收税,答案上界为 m-1;对 v 不小于 m 的情形,由税后 (1-x%)v 小于 m-1 解得 v 小于 (m-1)/(1-x%),向下取整并减去微小量避免边界误差,若结果小于 m 则无解,输出 Not found。

题意简述​

给定最低应税收入 mm 和税率 x%x\%,表示工资大于 mm 时收税 x%x\%。

求最大收入 vv,使得税后收入小于未达到 vv 的收入者的税前收入。无解输出 Not found。

解题思路​

如果收入小于 mm 时不收税,所以最大收入为 m−1m-1。

收入 v≥mv\ge m,税后收入为 (1−x%)v(1-x\%)v,因此:

(1−x%)v<m−1(1-x\%)v<m-1

整理得:

v<m−11−x%v<\frac{m-1}{1-x\%}

所以:

vmax=⌊m−11−x%−ϵ⌋v_{max}=\left\lfloor\frac{m-1}{1-x\%}-\epsilon\right\rfloor

如果 vmax<mv_{max}<m 无解,输出 Not found;否则输出 vmaxv_{max}。

参考代码​

302 Bcpp
#include <bits/stdc++.h>
using namespace std;

using ll=long long;
const double eps=1e-5;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll m,x;
while(cin>>m>>x&&!(m==0&&x==0))
{
ll v=100.0*(m-1)/(100.0-x)-eps;
if(v<m)cout<<"Not found"<<'\n';
else cout<<v<<'\n';
}
return 0;
}