题目名字很好听,仲夏夜之梦。
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int n;
while(scanf("%d",&n)==1)
{
vector<int> r;
for(int i=0;i<n;i++)
{
int t;
scanf("%d",&t);
r.push_back(t);
}
sort(r.begin(),r.end());
int ansa,ansb,ansc;
if(n&1)
{
ansa=r[n>>1];
ansb=upper_bound(r.begin(),r.end(),r[n>>1])-lower_bound(r.begin(),r.end(),r[n>>1]);
ansc=1;
}
else
{
ansa=r[(n>>1)-1];
ansb=upper_bound(r.begin(),r.end(),r[(n>>1)-1])-lower_bound(r.begin(),r.end(),r[(n>>1)-1]);
if(r[(n>>1)-1]!=r[n>>1])
ansb+=upper_bound(r.begin(),r.end(),r[(n>>1)])-lower_bound(r.begin(),r.end(),r[(n>>1)]);
ansc=r[n>>1]-r[(n>>1)-1]+1;
}
printf("%d %d %d\n",ansa,ansb,ansc);
}
return 0;
}
这道题目重点在于中位数~中位数一定可以使得最终结果最小。
以下是我的代码:
posted on 2011-05-20 16:30
lee1r 阅读(463)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:排序