ZJU-PAT 1056. Mice and Rice (25) 浙大2013年上机复试第四题

来源:互联网 发布:淘宝主营类目在哪看 编辑:程序博客网 时间:2024/05/22 15:35
#pragma warning (disable:4786)#include<iostream>#include<string>#include<cstdio>#include<algorithm>#include<map>#include<queue>using namespace std;int n,m;int B[100005];int flag;int cnt;//第几轮次被淘汰 int group[1005],num_in_group;struct mice{int id;int weight;bool join;int rounds;int rank;};mice TT[100005];bool judge(){for(int i=0;i<n;i++) {if(TT[i].join==false) return true;}return false;}bool cmp(mice a,mice b){return a.rounds >b.rounds;}bool cmp1(mice a,mice b){return a.id<b.id;}void process(int num){if(flag==n-1){TT[group[0]].rounds=cnt;TT[group[0]].join=true;return;}int _id=-1,_max=-1,i;for(i=0;i<num;i++){if(TT[group[i]].weight>_max) {_max=TT[group[i]].weight;_id=i;}}for(i=0;i<num;i++){if(i==_id) continue;TT[group[i]].rounds=cnt;TT[group[i]].join=true;flag++;}}int main(){while(scanf("%d%d",&n,&m)!=EOF){int i,j;//-------input--------for(i=0;i<n;i++) {scanf("%d",&TT[i].weight);TT[i].join=false;TT[i].id=i;}for(i=0;i<n;i++) scanf("%d",&B[i]);//------group----------cnt=1;flag=0;while(judge()){num_in_group=0;for(i=0;i<n;i++) {if(TT[B[i]].join==true) continue;group[num_in_group++]=B[i];if(num_in_group==m) {process(num_in_group);num_in_group=0;}}if(num_in_group) process(num_in_group);cnt++;}//-------output----------sort(TT,TT+n,cmp);TT[0].rank=1;for(i=1;i<n;i++){if(TT[i].rounds==TT[i-1].rounds)TT[i].rank=TT[i-1].rank;else TT[i].rank=i+1;}sort(TT,TT+n,cmp1);for(i=0;i<n;i++){if(i!=n-1)printf("%d ",TT[i].rank);elseprintf("%d\n",TT[i].rank);}}return 0;}

原创粉丝点击