CCF 2016 12-2 工资计算
为了节约时间,用到了哈希查找;
#include<iostream>
#include<vector>
#include<list>
using namespace std;
int a = 1500*(1-0.03) +3500;
int b=a+3000*0.9;
int c = b+4500*0.8;
int d = c+26000*0.75;
int e = d+20000*0.7;
int f =e+25000*0.65;
int T(int S)
{
int t =0;
if(S<=3500)
return S;
int A = S-3500;
if(A<1500)
return A*(1-0.03)+3500;
if(A >=1500 && A<4500)
return a+(A-1500)*0.9;
if(A>=4500 && A<9000)
return b+(A-4500)*0.8;
if(A>=9000 && A<35000)
return c+(A-9000)*0.75;
if(A>=35000 && A<55000)
return d+(A-35000)*0.7;
if(A>=55000 && A<80000)
return e+(A-55000)*0.65;
else
return f+(A-80000)*0.55;
}
struct Node
{
int num;
int id;
};
int HashSearch(int q[],int n)
{
int M =200;
vector<list<Node*>>v(M);
for(int i=0;i<1545;i++)
{
Node* p = (Node*)malloc(sizeof(Node));
p->num = q[i];
p->id = i;
v[q[i]%M].push_back(p);
}
int m = n%M;
auto ite = v[m].begin();
while(ite != v[m].end())
{
if((*ite)->num == n)
return (*ite)->id;
ite++;
}
}
int main()
{
int n ;
cin>>n;
int N = 154500;
int q[1545];
for(int i=0;i<1545;i++)
{
q[i] = T(i*100);
}
int med = HashSearch(q,n);
printf("%d\n",med*100);
return 0;
}