比赛 |
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;
}