CODEFORCES --- 490A. Team Olympiad

490A. Team Olympiad

贝兰德首府的 0 号学校有 n 名学生。这所学校的所有孩子都很有天赋:有的擅长编程,有的擅长数学,还有的擅长体育。因此,我们知道每个孩子的数值为 ti

  • ti = 1 ,如果第 i 个孩子擅长编程;
  • ti = 2 ,如果第 i 个孩子擅长数学;
  • ti = 3 ,如果第 i 个孩子擅长体育;

每个孩子恰好擅长这三个科目中的一个。

团队科学十项全能奥林匹亚竞赛要求三个学生组成一个团队。学校老师决定,这些团队将由三个擅长不同科目的孩子组成。也就是说,每支队伍必须有一名数学家、一名程序员和一名运动员。当然,每个孩子最多只能参加一支队伍。

学校最多能派出多少支队伍参加奥林匹克竞赛?应该如何组队?

输入

第一行包含整数 n ( 1 ≤ n ≤ 5000 )–学校的儿童人数。第二行包含 n 个整数 t1, t2, …, t**n ( 1 ≤ t**i ≤ 3 ),其中 t**i 描述了第 i 个孩子的技能。

输出

第一行输出整数 w - 可能的最大队伍数。

然后打印 w 行,每行包含三个数字。每个三位数代表组成团队的子代的索引。您可以按照任意顺序打印队伍和三连音中的数字。孩子们的编号从 1 到 n ,按他们在输入中出现的顺序排列。每个孩子最多只能参加一个小组。如果有多个解决方案,则打印其中任何一个。

如果无法编译出团队,则打印唯一一行值 w 等于 0 的行。

例如

输入

7
1 3 1 3 2 1 2

输出

2
3 5 2
6 7 4

输入

4
2 1 1 2

输出

0

解决方法:

// CODEFORCES
// 490A. Team Olympiad

# include<iostream>

using namespace std;

int main()
{
	int n, m;
	cin >> n;
	int t1[n], t2[n], t3[n], tm[n];
	for(int i = 1; i <= n; i++)
	{
		t1[i] = 0;
		t2[i] = 0;
		t3[i] = 0;
		cin >> m;
		tm[i] = m;
	}
	int j = 0, t = 0,  k = 0;
	for(int i = 1; i <= n; i++)
	{
		
		if(tm[i] == 1)
		{
			t1[++j] = i;
		}
		else if(tm[i] == 2)
		{
			t2[++t] = i;
		}
		else
		{
			t3[++k] = i;
		}
	}
	int sum = 0;
	int ans[n][4];
	for(int i = 1; i <= n; i++)
	{
		if(t1[i] != 0 && t2[i] != 0 && t3[i] != 0)
		{
			++sum;
			ans[sum][1]=t1[i]; 
//			cout << sum << ans[sum][1] <<' '; 
			ans[sum][2]=t2[i];
//			cout << sum << ans[sum][2] << ' '; 
			ans[sum][3]=t3[i];
//			cout << sum << ans[sum][3] << endl; 
		}	
	}
	if(sum == 0) 
	{
		cout << sum << endl;
	}
	else
	{	cout << sum << endl;
		for(int i = 1; i <= sum; i++)
		{
			cout << ans[i][1] <<' '<< ans[i][2] << ' '<< ans[i][3] <<endl;
		}
	}	
	return 0; 
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值