THU2015 fall 1-1 Team

THU2015 fall 1-1 Team


描述

  教练员A、B和C将要从编号为1到n的队员中挑选自己的队员。为公平起见,每个教练都根据自己的喜好程度将队员排序;你负责根据以下规则为他们分配队员。

  你拿到的数据是a、b、c三个数组,表示三个教练对队员的喜好程度排序,每个数组都是数字1到n的一个排列,下标越小表示教练越喜欢该队员。你的分组规则是,从还未被分配的队员中找一个教练A最喜欢的队员分到A组;然后,在未分配的队员中分配教练B最喜欢的队员到B组;然后是教练C;再是教练A、B......依次类推直到所有队员分配完毕。

  现在队员k希望知道自己被分配给哪位教练,请你来告诉他。

输入

  共5行。

  第1行包含一个整数n。

  第2至4行依次是数组a、b和c,每行都是整数[1, n]的一个排列。

  第5行包含一个整数k。

输出

  仅一个字符,A、B或C,表示队员k被分配给哪位教练。

输入样例1
3
1	2	3
1	2	3
1	2	3
3
输出样例1
C
输入样例2
5
1	2	3	4	5
1	3	5	4	2
5	4	3	2	1
4
输出样例2
B

限制

1 <= n <= 500,000

1 <= k <= n

时间:1 sec

空间:256 MB

提示

一级提示

  大体上,1 sec内,O(n)的算法可以通过n = 10,000,000规模的数据,O(nlogn)通过500,000规模,O(n^2)通过5,000规模。

  本题等一些复杂度是O(n)的题目受限于scanf(“%d”, ...)的读入速度,但又不希望通过读取二进制文件等不直观的方式增加同学们的负担。


代码如下:

#include <stdio.h>
#include <string.h>

const int SZ = 1 << 20;  //提升IO buff 
struct fastio{
	char inbuf[SZ];
	char outbuf[SZ];
	fastio(){
		setvbuf(stdin, inbuf, _IOFBF, SZ);
		setvbuf(stdout, outbuf, _IOFBF, SZ);
	}
}io;

#define N 500001
int dp[4][N];
int mark[N]; // 0:未选  1:已选
char ret[N];

void team(int n, int *mark)
{
	int a = 1, b = 1, c = 1;
	int t;
	for (int i = 0; i < n; i++)
	{
		t = i % 3;
		switch (t)
		{
		case 0:
			while (mark[dp[t][a]] == 1) a++;
			mark[dp[t][a]] = 1;
			ret[dp[t][a]] = 'A';
			break;
		case 1:
			while (mark[dp[t][b]] == 1) b++;
			mark[dp[t][b]] = 1;
			ret[dp[t][b]] = 'B';
			break;
		case 2:
			while (mark[dp[t][c]] == 1) c++;
			mark[dp[t][c]] = 1;
			ret[dp[t][c]] = 'C';
			break;
		}
			
	}
}

int main()
{
	int n;
	int k;
	scanf("%d", &n);

	for (int i = 0; i < 3; i++)
	{
		for (int j = 1; j <= n; j++)
			scanf("%d", &dp[i][j]);
	}
	
	memset(mark, 0, n);
	team(n, mark);
	scanf("%d", &k);
	printf("%c\n", ret[k]);

	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值