码迷,mamicode.com
首页 > 其他好文 > 详细

【PAT甲级】1056 Mice and Rice (25 分)

时间:2019-10-14 23:37:39      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:pat   while   clu   个数   timespec   return   amp   ++i   代码   

题意:

输入两个正整数N和M(<=1000),接着输入两行,每行N个数,第一行为每只老鼠的重量,第二行为每只老鼠出战的顺序。输出它们的名次。(按照出战顺序每M只老鼠分为一组,剩余不足M只为一组,每组只能有一个胜者,其他老鼠排名均为这一轮胜者数量+1)

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1007],b[1007];
int num;
int ans[1007];
int c[1007],d[1007];
pair<int,int>e[1007];
int flag;
bool vis[1007];
void contest(){
int cnt=0;
int round=0;
int no=0;
for(int i=1;i<=num;++i){
c[++cnt]=b[i];
if(cnt==m||i==num){
++round;
int mx=a[c[1]],pos=c[1];
for(int j=2;j<=cnt;++j){
if(a[c[j]]>mx){
mx=a[c[j]];
pos=c[j];
}
}
for(int j=1;j<=cnt;++j)
if(c[j]==pos)
d[++no]=c[j];
else
vis[c[j]]=1;
cnt=0;
}
}
for(int i=1;i<=num;++i)
if(!ans[b[i]]&&vis[b[i]])
ans[b[i]]=round+1;
if(round==1){
ans[d[1]]=1;
flag=1;
}
for(int i=1;i<=no;++i)
b[i]=d[i];
num=no;
no=0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i];
for(int i=1;i<=n;++i){
cin>>b[i];
++b[i];
}
num=n;
while(!flag)
contest();
cout<<ans[1];
for(int i=2;i<=n;++i)
cout<<" "<<ans[i];
return 0;
}

【PAT甲级】1056 Mice and Rice (25 分)

标签:pat   while   clu   个数   timespec   return   amp   ++i   代码   

原文地址:https://www.cnblogs.com/ldudxy/p/11674701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!