/ Randle /

记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 5ms 4.34 MiB
#2 Accepted 2ms 2.355 MiB
#3 Accepted 5ms 2.484 MiB
#4 Accepted 2ms 2.375 MiB
#5 Accepted 36ms 2.5 MiB
#6 Accepted 57ms 6.875 MiB
#7 Accepted 715ms 38.0 MiB
#8 Accepted 214ms 5.738 MiB
#9 Accepted 386ms 32.375 MiB
#10 Accepted 178ms 8.992 MiB

代码

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

const int N=300005;

map<int,int> M0,M1;
int A[2*N];
int n,m,a[N],b[N],ans=N;

void init()
{
	scanf("%d", &n);
	for (int i=1; i<=n; i++)
	{
		scanf("%d %d",&a[i], &b[i]);
		if (a[i]==b[i]) M0[a[i]]++;//记录a的次数
		else M0[a[i]]++, M1[b[i]]++;
		A[++m]=a[i];//将所有出现的数都放在A[]中
		A[++m]=b[i];
	}
	sort(A+1,A+m+1);
} 

void work()
{
	for (int i=1; i<=m; i++)//枚举在最终要翻的牌面数字
	{
		int x=M0[A[i]],y=M1[A[i]];
		if (x+y>=(n+1)/2)
			ans=min(ans,max((n+1)/2-x,0));
	}
	if (ans==N)printf("Impossible\n");
	else printf("%d\n",ans);
	return;
}

int main()
{
	init();
	work();
	return 0;
}

信息

递交者
类型
递交
题目
纸牌
题目数据
下载
语言
C++
递交时间
2018-10-05 19:49:58
评测时间
2018-10-05 19:49:58
评测机
分数
100
总耗时
1605ms
峰值内存
38.0 MiB