比赛 20111102 评测结果 AAAAA
题目名称 个人所得税 最终得分 100
用户昵称 kaaala 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-02 19:18:44
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. const int sd[10]={0,500,2000,5000,20000,40000,60000,80000,100000,1000000000},sl[]={0,5,10,15,20,25,30,35,40,45};
  9.  
  10. int m;
  11. double ans,z[50001][13];
  12.  
  13. double INCOME(double x)
  14. {
  15. if(x<=4000)
  16. x-=800;
  17. else
  18. x*=0.8;
  19. if(x<0)
  20. return 0;
  21. if(x<=20000)
  22. return x*0.2;
  23. if(x<=50000)
  24. return (x-20000)*0.3+4000;
  25. return (x-50000)*0.4+13000;
  26. }
  27.  
  28. double PAY(int x)
  29. {
  30. x-=800;
  31. if(x<=0)
  32. return 0;
  33. double re=0;
  34. for(int i=1;i<=9;++i)
  35. {
  36. if(x<=sd[i])
  37. return (re+(x-sd[i-1])*sl[i])/100;
  38. re+=sl[i]*(sd[i]-sd[i-1]);
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. freopen("personaltax.in","r",stdin);
  45. freopen("personaltax.out","w",stdout);
  46. scanf("%d",&m);
  47. for(;;)
  48. {
  49. char s[10];
  50. scanf("%s",s);
  51. if(s[0]=='#')
  52. break;
  53. int a,b,d,e;
  54. char c;
  55. scanf("%d%d%c%d%d",&a,&b,&c,&d,&e);
  56. if(s[0]=='I')
  57. z[a][0]+=INCOME(e);
  58. else
  59. z[a][b]+=e;
  60. }
  61. for(int i=1;i<=m;++i)
  62. {
  63. ans+=z[i][0];
  64. for(int j=1;j<=12;++j)
  65. ans+=PAY(z[i][j]);
  66. }
  67. printf("%.2lf\n",ans);
  68. return 0;
  69. }