比赛 20111102 评测结果 AWWWE
题目名称 个人所得税 最终得分 20
用户昵称 lizhe 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2011-11-02 21:54:52
显示代码纯文本
  1. program personaltax;
  2. var
  3. i,j,m,t,mon,num,ney:longint;
  4. s,p:string;
  5. money:real;
  6. month:array[1..50000,1..12]of real;
  7. k:integer;
  8. sum:real;
  9. procedure init;
  10. begin
  11. assign(input,'personaltax.in');
  12. reset(input);
  13. assign(output,'personaltax.out');
  14. rewrite(output);
  15. readln(m)
  16. end;
  17.  
  18. procedure block;
  19. begin
  20. while s[1]=' ' do
  21. delete(s,1,1)
  22. end;
  23.  
  24. procedure pay;
  25. begin
  26. delete(s,1,3);
  27. block;
  28. t:=pos(' ',s);
  29. p:=copy(s,1,t-1);
  30. delete(s,1,t);
  31. block;
  32. val(p,num,k);
  33. t:=pos('/',s);
  34. p:=copy(s,1,t-1);
  35. val(p,mon,k);
  36. t:=pos(' ',s);
  37. delete(s,1,t);
  38. val(s,ney,k);
  39. money:=ney;
  40. month[num,mon]:=month[num,mon]+money
  41. end;
  42.  
  43. procedure income;
  44. begin
  45. delete(s,1,6);
  46. block;
  47. t:=pos(' ',s);
  48. repeat
  49. delete(s,1,t);
  50. t:=pos(' ',s)
  51. until t=0;
  52. val(s,ney,k);
  53. money:=ney;
  54. if (money>800) and (money<=4000) then sum:=sum+(money-800)*0.2;
  55. if money>4000 then
  56. begin
  57. sum:=sum+640;
  58. money:=(money-4000)*0.8;
  59. if money<=20000 then sum:=sum+money*0.2;
  60. if (money>20000) and (money<=50000) then sum:=sum+4000+(sum-20000)*0.3;
  61. if money>50000 then sum:=sum+13000+(sum-50000)*0.4
  62. end
  63. end;
  64.  
  65. procedure main;
  66. begin
  67. readln(s);
  68. repeat
  69. block;
  70. while s[length(s)]=' ' do delete(s,length(s),1);
  71. if s[1]='P' then pay;
  72. if s[1]='I' then income;
  73. readln(s)
  74. until s='#';
  75. for i:=1 to m do
  76. for j:=1 to 12 do
  77. begin
  78. money:=month[i,j];
  79. if money>800 then
  80. begin
  81. money:=money-800;
  82. if money<=500 then sum:=sum+money*0.05;
  83. if (money>500) and (money<=2000) then sum:=sum+25+(money-500)*0.1;
  84. if (money>2000) and (money<=5000) then sum:=sum+175+(money-2000)*0.15;
  85. if (money>5000) and (money<=20000) then sum:=sum+625+(money-5000)*0.2;
  86. if (money>20000) and (money<=40000) then sum:=sum+3625+(money-20000)*0.25;
  87. if (money>40000) and (money<=60000) then sum:=sum+8625+(money-40000)*0.3;
  88. if (money>60000) and (money<=80000) then sum:=sum+14625+(money-60000)*0.35;
  89. if (money>80000) and (money<=100000) then sum:=sum+21625+(money-80000)*0.4;
  90. if money>100000 then sum:=sum+29625+(money-100000)*0.45
  91. end
  92. end
  93. end;
  94.  
  95. procedure print;
  96. begin
  97. writeln(sum:0:2);
  98. close(input);
  99. close(output)
  100. end;
  101.  
  102. begin
  103. init;
  104. main;
  105. print
  106. end.