PAT(甲级)2020年春季考试 7-2 The Judger
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT(甲级)2020年春季考试 7-2 The Judger相关的知识,希望对你有一定的参考价值。
这道题在模拟过程类型题种算友好的,很平铺直叙,主要就是hash的应用。
有两个小点:
1. 怎样快速求两个未知大小的整数a和b的差值(>=0)
abs(a,b)
2. 如果某一轮有不止一个人淘汰,应该输出
Round #1: 3 is out.
Round #1: 4 is out.
而不是
Round #1: 3 4 is out.
AC代码
#include<string>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<set>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 1010;
int N[11][maxn];
int cBe[100010] = {0};
int cnBe[100010] = {0};
int dead[11] = {0};
vector<int> vi;
void makeSub(int x){
for(int i=0;i<vi.size();i++){
int y = vi[i];
cBe[abs(x-y)] = 1;
}
return;
}
int main(){
int start1,start2;
scanf("%d %d",&start1,&start2);
cnBe[start1] = 1;
cnBe[start2] = 1;
cBe[abs(start1-start2)] = 1;
vi.push_back(start1);
vi.push_back(start2);
int playN,roundN;
scanf("%d %d",&playN,&roundN);
for(int i=1;i<=playN;i++){
for(int j=1;j<=roundN;j++){
scanf("%d",&N[i][j]);
}
}
int totalDead = 0;
for(int j=1;j<=roundN;j++){
for(int i=1;i<=playN;i++){
if(dead[i]!=1){//i没死
int now = N[i][j];
if(cnBe[now]==1||cBe[now]==0){//现在死了
dead[i] = 1;
totalDead ++;
printf("Round #%d: %d is out.\\n",j,i);
}else{//又活过一局
cnBe[now] = 1;
makeSub(now);
vi.push_back(now);
}
}
}
}
//输出总结果
if(totalDead==playN){
printf("No winner.\\n");
}else{
printf("Winner(s):");
for(int i=1;i<=playN;i++){
if(dead[i]==0)printf(" %d",i);
}
printf("\\n");
}
return 0;
}
运行结果
以上是关于PAT(甲级)2020年春季考试 7-2 The Judger的主要内容,如果未能解决你的问题,请参考以下文章
PAT(甲级)2020年春季考试 7-4 Replacement Selection
PAT(甲级)2019年春季考试 7-3 Telefraud Detection