1. 程式人生 > >YTU OJ 3301: 喵喵的Logo

YTU OJ 3301: 喵喵的Logo

3301: 喵喵的Logo

 

題目描述

喵喵是一家科技公司的實習程式設計師。這一天,他的公司正在換新Logo。為了設計他們公司的Logo,公司的卓BOSS花重金請了許多專業設計師設計了許多Logo,喵喵作為一個90後,被委派選出能夠代表他們公司的最好Logo,因為年輕人對新鮮有意思的事物十分敏感。 喵喵想了一個民主的方法,所有公司員工組成投票委員會。投票制度有點複雜:每個員工按照順序最多給三種不同的Logo投一票。每個員工的第一種票、第二種票、第三種票分別代表3分,2分,1分。Logo的最終分數是所有員工投票後的總分數。得分最高的Logo將會被喵喵選用作為公司的Logo。如果最高分數的Logo有多個,那麼獲得第一種票數多的被選用。如果它們的分數和第一種票數也一樣,那麼第二種票多的被選用。還有類似的情況,處理情況與上述一樣,如果最終還有並列的Logo,則全被選用。作為喵喵的好朋友,你能編出程式幫助他這個新手程式設計師順利解決這個問題嗎。

輸入

輸入資料有若干組。每一組第一行有一個正整數n(1<=n<=100)表示該公司的員工總數。
接下來的n行中,每一行開始有一個整數di(1<=di<=3),表示第i的員工選擇投票的Logo數
緊接著有di個不同的整數ID,表示Logo的編號(1<=ID<=1e6)。
輸入將會以0為結束標誌。

 

輸出

對於每一組樣例,輸出最終被選用的Logo的ID。如果有多個Logo被選用,請按照從小到大的順序輸出Logo的ID

樣例輸入

4
3 5 2 1
3 12 5 2
2 1 2
3 2 1 5
2
3 3 2 1
3 2 3 1
0

樣例輸出

2
2 3
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int Max = 1e6+5;
using namespace std;
struct vote
{
	int id;
	int x;
	int y;
	int z;
	int sum;
}a[Max];
bool cmp(vote a,vote b)
{
	if(a.sum==b.sum)
	{
		if(a.x==b.x)
		{
			if(a.y==b.y)
			{
				if(a.z==b.z)
				{
					return a.id<b.id;
				}
				return a.z>b.z;
			}
			return a.y>b.y;
		}
		return a.x>b.x;
	}
	return a.sum>b.sum;
}
int main()
{
	int n;
	int i,j,k,l,m;
	int a1,b1,c1;
	int t=0;
	while(cin>>n&&n)
	{
		memset(a,0,sizeof(a));
		while(n--)
		{
			cin>>m;
			if(m==3)
			{
				cin>>a1>>b1>>c1;
				t=max(t,a1);
				t=max(t,b1);
				t=max(t,c1);
				a[a1].id=a1;
				a[b1].id=b1;
				a[c1].id=c1;
				a[a1].x++;
				a[a1].sum+=3;
				a[b1].y++;
				a[b1].sum+=2;
				a[c1].z++;
				a[c1].sum+=1;
			}
			if(m==2)
			{
				cin>>a1>>b1;
				t=max(t,a1);
				t=max(t,b1);
				a[a1].id=a1;
				a[b1].id=b1;
				a[a1].x++;
				a[a1].sum+=3;
				a[b1].y++;
				a[b1].sum+=2;
			}
			if(m==1)
			{
				cin>>a1;
				t=max(t,a1);
				a[a1].id=a1;
				a[a1].x++;
				a[a1].sum+=3;
			}
		}
		sort(a,a+1+t,cmp);
		cout<<a[0].id;
		i=1;
		while(a[i].sum==a[0].sum&&a[i].x==a[0].x&&a[i].y==a[0].y&&a[i].z==a[0].z)
		{
			cout<<" "<<a[i].id;
			i++;
		}
		cout<<endl;
	}
	return 0;
}