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年春季考试题解

PAT(甲级)2017年春季考试

PAT(甲级)2019年春季考试 7-3 Telefraud Detection

PAT(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles

PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes