UVa 10057 A mid-summer night's dream.

UVa 10057 A mid-summer night's dream.
题目名字很好听,仲夏夜之梦。
#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 ;
}

这道题目重点在于中位数~中位数一定可以使得最终结果最小。
以下是我的代码:

你可能感兴趣的:(UVa 10057 A mid-summer night's dream.)