心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
题目名字很好听,仲夏夜之梦。
#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 阅读(446) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:排序

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理