1. 程式人生 > >Uva 10057 A mid-summer night's dream

Uva 10057 A mid-summer night's dream

題目連結:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=998 題意:與10041Uva 10041 Vito's Family類似,只不過求得滿足最小條件的數,給出的n個數中滿足條件的數個數,和所有滿足條件的數個數。 題解: 中位數最小值為排序後n/2位置上的數。 對於奇數個數,滿足條件的數只有一個,最中間的數,求出在給出的數中的個數即可。 對於偶數個數,滿足條件的數是最中間兩個數之間的任何數,求出給出的數中等於最中間兩個數的個數。 程式碼:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX=1000000+10;
int a[MAX];
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		sort(a,a+n);
		int ans1=0,ans2=0,ans3=0;
		if(n%2)
		{
			ans1=a[n/2];
			for(int i=0;i<n;i++)
			{
				if(a[i]==ans1)
					ans2++;
			}
			ans3=1;
		}
		else
		{
			ans1=a[n/2-1];
			for(int i=0;i<n;i++)
				if(a[i]==a[n/2-1]||a[i]==a[n/2])
					ans2++;
			ans3=a[n/2]-a[n/2-1]+1;
		}
		printf("%d %d %d\n",ans1,ans2,ans3);
	}
	return 0;
}