记录编号 31673 评测结果 AAAAA
题目名称 [NOI 1998]个人所得税 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2011-11-03 13:40:44 内存使用 2.74 MiB
显示代码纯文本
#include <cstdio>
using namespace std;

int inf[50001][13]={{0}};
double total=0;

void cal_I(int n)
{
	double truth;
	if (n<=4000)
	{
		truth=n-800;
		if (truth<0)
			truth=0;
	}
	else
	{
		truth=n*0.8;
	}
	if (truth==0)
		return;
	/////////////////////
	if (truth<=20000)
	{
		total+=truth*0.2;
		truth=0;
	}
	else
	{
		total+=20000*0.2;
		truth-=20000;
	}
	/////////////////////
	if (truth<=30000)
	{
		total+=truth*0.3;
		truth=0;
	}
	else
	{
		total+=30000*0.3;
		truth-=30000;
	}
	/////////////////////
	if (truth>=0)
	{
		total+=truth*0.4;
		truth=0;
	}
}

/*
一次性劳动报酬所得。按次计算征税,每次不超过4000元的,减除费用800元;4000元以上的,减除20%的费用,余额为应纳税所得额。征税税率如下表所示:

级数	每次应纳税所得额	税率(%)
1	不超过20000元的部分	        20
2	超过20000元~50000元的部分	30
3	超过50000元的部分	        40
*/

void cal_P(int n)
{
	double truth;
	truth=n-800;
	if (truth<0)
		truth=0;
	if (truth==0)
		return;
	/////////////////////
	if (truth<=500)
	{
		total+=truth*0.05;
		truth=0;
	}
	else
	{
		total+=500*0.05;
		truth-=500;
	}
	/////////////////////
	if (truth<=1500)
	{
		total+=truth*0.1;
		truth=0;
	}
	else
	{
		total+=1500*0.1;
		truth-=1500;
	}
	/////////////////////
	if (truth<=3000)
	{
		total+=truth*0.15;
		truth=0;
	}
	else
	{
		total+=3000*0.15;
		truth-=3000;
	}
	/////////////////////
	if (truth<=15000)
	{
		total+=truth*0.2;
		truth=0;
	}
	else
	{
		total+=15000*0.2;
		truth-=15000;
	}
	/////////////////////
	if (truth<=20000)
	{
		total+=truth*0.25;
		truth=0;
	}
	else
	{
		total+=20000*0.25;
		truth-=20000;
	}
	/////////////////////
	if (truth<=20000)
	{
		total+=truth*0.3;
		truth=0;
	}
	else
	{
		total+=20000*0.3;
		truth-=20000;
	}
	/////////////////////
	if (truth<=20000)
	{
		total+=truth*0.35;
		truth=0;
	}
	else
	{
		total+=20000*0.35;
		truth-=20000;
	}
	/////////////////////
	if (truth<=20000)
	{
		total+=truth*0.4;
		truth=0;
	}
	else
	{
		total+=20000*0.4;
		truth-=20000;
	}
	/////////////////////
	if (truth>=0)
	{
		total+=truth*0.45;
		truth=0;
	}
}

/*
工资、薪金所得。按月计算征税,以每月收入额减除费用800元后的余额作为该月应纳税所得额,税率如下表所示:

级数	月应纳税所得额	     税率(%)
1	不超过500元的	             5
2	超过500元~2000元的部分	    10
3	超过2000元~5000元的部分	    15
4	超过5000元~20000元的部分	20
5	超过20000元~40000元的部分	25
6	超过40000元~60000元的部分	30
7	超过60000元~80000元的部分	35
8	超过80000元~100000元的部分	40
9	超过100000元的部分	45
*/

int main(void)
{
	freopen("personaltax.in","r",stdin);
	freopen("personaltax.out","w",stdout);
	int i,j,m,num,mon,money;
	char str[20];
	scanf("%d\n",&m);
	//PAY 1 2/23 3800
	//INCOME 2 4/8 4010
	while (scanf("%s %d %d/%*d %d\n",&str,&num,&mon,&money)==4)
	{
		if (str[0]=='P')
			inf[num][mon]+=money;
		else
			cal_I(money);
	}
	for (i=1;i<=m;i++)
		for (j=1;j<=12;j++)
			cal_P(inf[i][j]);
	printf("%.2lf\n",total);
	fclose(stdin);
	fclose(stdout);
	return(0);
}