比赛 20111102 评测结果 MMMMM
题目名称 个人所得税 最终得分 0
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-02 22:05:06
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
double q[50010],answer=0;
struct hehe
{
	double zhong,ren,yue,ri,qian;
}w[1000000];
int cmp( const void *a , const void *b );
int number,ji=-1,u[50010]={0},used[50010]={0};
int main()
{
	freopen ("personaltax.in","r",stdin);
	freopen ("personaltax.out","w",stdout);
	scanf("%d",&number);
	char s[7];
	while (cin>>s)
	{
		int lq;
		lq=strlen (s);
		if (s[0]=='#')
		{
			break;
		}
		ji++;
		if (lq==6)
		{
			w[ji].zhong=1;
			double a;
			cin>>a;
			w[ji].ren=a;
			cin>>a;
			w[ji].yue=a;
			scanf("%c^[/]",&s);
			cin>>a;
			w[ji].ri=a;
			cin>>a;
			w[ji].qian=a;
		}
		else
		{
			w[ji].zhong=0;
			double a;
			cin>>a;
			w[ji].ren=a;
			cin>>a;
			w[ji].yue=a;
			scanf("%c^[/]",&s);
			cin>>a;
			w[ji].ri=a;
			cin>>a;
			w[ji].qian=a;
		}
	}
	qsort(w,ji+1,sizeof(w[0]),cmp);
	for (int i=0;i<=ji;i++)
	{
		if (w[i].zhong==1)
		{
			if (w[i].yue!=u[(int)w[i].ren])
			{
				u[(int)w[i].ren]=w[i].yue;
				double temp;
				temp=q[(int)w[i].ren];
				temp-=800;
				bool fuck=true;
				if (temp<=500&&fuck)
				{
					temp=temp*95/100;
					fuck=false;
				}
				if (temp>500&&temp<=2000&&fuck)
				{
					temp-=25+(temp-500)*10/100;
					fuck=false;
				}
				if (temp>2000&&temp<=5000&&fuck)
				{
					temp-=25+150+(temp-5000)*15/100;
					fuck=false;
				}
				if (temp>=5000&&temp<20000&&fuck)
				{
					temp-=25+450+150+(temp-20000)*20/100;
					fuck=false;
				}
				if (temp>=20000&&temp<40000&&fuck)
				{
					temp-=25+150+450+3000+(temp-20000)*25/100;
					fuck=false;
				}
				if (temp>=40000&&temp<60000&&fuck)
				{
					temp-=25+150+450+3000+5000+(temp-40000)*30/100;
					fuck=false;
				}
				if (temp>=60000&&temp<80000&&fuck)
				{
					temp-=25+150+450+3000+5000+6000+(temp-60000)*35/100;
					fuck=false;
				}
				if (temp>=80000&&temp<100000&&fuck)
				{
					temp-=25+150+450+3000+5000+6000+7000+(temp-80000)*40/100;
					fuck=false;
				}
				if (temp>=100000&&fuck)
				{
					temp-=25+150+450+3000+5000+6000+7000+8000+(temp-100000)*45/100;
					fuck=false;
				}
				temp+=800;
				q[(int)w[i].ren]=temp+w[i].qian;
				used[(int)w[i].ren]=1;
			}
			q[(int)w[i].ren]+=w[i].qian;
			double c;
			if (q[(int)w[i].ren]<=4000)
			{
				q[(int)w[i].ren]-=800;
				c=800;
			}
			else
			{
				c=q[(int)w[i].ren]*20/100;
				q[(int)w[i].ren]=q[(int)w[i].ren]*80/100;
				
			}
			if (q[(int)w[i].ren]<=20000)
			{
				q[(int)w[i].ren]=q[(int)w[i].ren]*80/100;
				q[(int)w[i].ren]+=c;
			}
			else
			{
				double temp;
				temp=q[(int)w[i].ren];
				if (temp>20000&&temp<=50000)
				{
					temp-=400+(temp-20000)*30/100;
				}
				else
				{
					temp-=13000+(temp-50000)*40/100;
				}
				q[(int)w[i].ren]=temp+c;
			}
		}
		if (w[i].zhong==0)
		{
			if (u[(int)w[i].ren]==0)
			{
				q[(int)w[i].ren]+=w[i].qian;
				u[(int)w[i].ren]=w[i].yue;
			}
			else
			{
				if (u[(int)w[i].ren]==w[i].yue)
				{
					q[(int)w[i].ren]+=w[i].qian;
				}
				else
				{
					u[(int)w[i].ren]=w[i].yue;
					double temp;
					temp=q[(int)w[i].ren];
					temp-=800;
					bool fuck=true;
					if (temp<=500&&fuck)
					{
						temp=temp*95/100;
						fuck=false;
					}
					if (temp>500&&temp<=2000&&fuck)
					{
						temp-=25+(temp-500)*10/100;
						fuck=false;
					}
					if (temp>2000&&temp<=5000&&fuck)
					{
						temp-=25+150+(temp-5000)*15/100;
						fuck=false;
					}
					if (temp>=5000&&temp<20000&&fuck)
					{
						temp-=25+450+150+(temp-20000)*20/100;
						fuck=false;
					}
					if (temp>=20000&&temp<40000&&fuck)
					{
						temp-=25+150+450+3000+(temp-20000)*25/100;
						fuck=false;
					}
					if (temp>=40000&&temp<60000&&fuck)
					{
						temp-=25+150+450+3000+5000+(temp-40000)*30/100;
						fuck=false;
					}
					if (temp>=60000&&temp<80000&&fuck)
					{
						temp-=25+150+450+3000+5000+6000+(temp-60000)*35/100;
						fuck=false;
					}
					if (temp>=80000&&temp<100000&&fuck)
					{
						temp-=25+150+450+3000+5000+6000+7000+(temp-80000)*40/100;
						fuck=false;
					}
					if (temp>=100000&&fuck)
					{
						temp-=25+150+450+3000+5000+6000+7000+8000+(temp-100000)*45/100;
						fuck=false;
					}
					temp+=800;
					q[(int)w[i].ren]=temp+w[i].qian;
					used[(int)w[i].ren]=1;
				}
			}
		}
	}
	for (int i=0;i<number;i++)
	{
		if (used[i]==1)
		{
			double temp;
			temp=q[i];
			temp-=800;
			bool fuck=true;
			if (temp<=500&&fuck)
			{
				temp=temp*95/100;
				fuck=false;
			}
			if (temp>500&&temp<=2000&&fuck)
			{
				temp-=25+(temp-500)*10/100;
				fuck=false;
			}
			if (temp>2000&&temp<=5000&&fuck)
			{
				temp-=25+150+(temp-5000)*15/100;
				fuck=false;
			}
			if (temp>=5000&&temp<20000&&fuck)
			{
				temp-=25+450+150+(temp-20000)*20/100;
				fuck=false;
			}
			if (temp>=20000&&temp<40000&&fuck)
			{
				temp-=25+150+450+3000+(temp-20000)*25/100;
				fuck=false;
			}
			if (temp>=40000&&temp<60000&&fuck)
			{
				temp-=25+150+450+3000+5000+(temp-40000)*30/100;
				fuck=false;
			}
			if (temp>=60000&&temp<80000&&fuck)
			{
				temp-=25+150+450+3000+5000+6000+(temp-60000)*35/100;
				fuck=false;
			}
			if (temp>=80000&&temp<100000&&fuck)
			{
				temp-=25+150+450+3000+5000+6000+7000+(temp-80000)*40/100;
				fuck=false;
			}
			if (temp>=100000&&fuck)
			{
				temp-=25+150+450+3000+5000+6000+7000+8000+(temp-100000)*45/100;
				fuck=false;
			}
			temp+=800;
			q[i]=temp;
		}
		answer+=q[i];
	}
	printf("%.2lf",answer);
	return 0;
}
int cmp( const void *a , const void *b )
{
	struct hehe *c = (struct hehe *)a;
	struct hehe *d = (struct hehe *)b;
	if(c->yue != d->yue) 
		return c->yue - d->yue;
	else 
		return c->ri - d->ri;
}