题目大意 :
按照题目要求进行筛选;素数筛啊 一定要调用 。 初始化啊初始化
#include<bits/stdc++.h> using namespace std; bool isprime[10000]={0}; void prime() { isprime[0]=isprime[1]=1; for(int i=2; i<sqrt(10000); i++) for(int j=i*i; j<10000; j+=i) isprime[j]=1; } struct node { string name,tname; char sex; int local; int waidi; int indi[1505]; int outdi[1505]; double rat; } stu[505]; map<string,int>team; map<int,int>oj; string str; int loc[1505],temp,grade; int wai[1505]; int nummao,numdoc,numteam; bool cmp1(node t1,node t2) { return t1.rat>t2.rat; } bool cmp2(int aa,int bb) { return aa>bb; } int main() { prime(); int T,n,m; cin>>T; while(T--) { cin>>n>>m; for(int i=0;i<n;i++){ stu[i].rat=0; } cin>>nummao; for(int i=0; i<nummao; i++) { cin>>temp; oj[temp]=1; } cin>>numdoc; for(int i=0; i<numdoc; i++) { cin>>temp; oj[temp]=2; } cin>>numteam; for(int i=0; i<numteam; i++) { cin>>str>>grade; team[str]=grade; } for(int i=0; i<n; i++) { cin>>stu[i].name>>stu[i].tname>>stu[i].sex>>stu[i].local>>stu[i].waidi; for(int j=0; j<stu[i].local; j++) cin>>stu[i].indi[j]; for(int j=0; j<stu[i].waidi; j++) cin>>stu[i].outdi[j]; } for(int i=0; i<n; i++) { if(team[stu[i].tname]==1) stu[i].rat+=36.0; else if(team[stu[i].tname]==2) stu[i].rat+=27.0; else if(team[stu[i].tname]==3) stu[i].rat+=18.0; if(stu[i].sex=='F') stu[i].rat+=33.0; for(int j=0; j<stu[i].local; j++) { bool flag=1; if(oj[stu[i].indi[j]]==1) { stu[i].rat+=2.5; } else if(oj[stu[i].indi[j]]==2) { stu[i].rat+=1.5; } else if(!isprime[stu[i].indi[j]]) stu[i].rat+=1.0; else stu[i].rat+=0.3; } sort(stu[i].outdi,stu[i].outdi+stu[i].waidi,cmp2); if(stu[i].waidi>=3.0) { if((double(stu[i].outdi[2]-1200)/100.0)*1.5>0) stu[i].rat+=((stu[i].outdi[2]-1200)/100.0)*1.5; } } sort(stu,stu+n,cmp1); for(int i=0; i<m; i++) cout<<stu[i].name<<" "<<fixed<<setprecision(3)<<stu[i].rat<<endl; team.clear(); oj.clear(); } return 0; }