Overcome ACM POJ 2370 - Democracy in danger

Problem: 2370
User: Poechant
Memory: 728K
Time: 16MS
Language: G++
Result: Accepted

/*

 * 作者: 柳大·Poechant

 * 博客: http://blog.csdn.net/poechant

 * 思路: 先按每组人数对n组进行快排,然后算出前(n/2+1)组各组人数(若为x)的x/2+1的和,即为结果。

 */

#include<iostream>

usingnamespace std;


int partition(int* data,int l,int h);

void quick_sort(int* data,int l,int h);


int main(void)

{

   int n;

   while (cin >> n)

   {

       int i;

       int *m =newint[n];

       int sum = 0;

       for (i = 0; i < n; ++i)

       {

            cin >> m[i];

            sum += m[i];

       }

       quick_sort(m, 0, n -1);


       int d = 0;

       i = 0;

       int l = n / 2 + 1;

       while (i < l)

       {

            d += m[i] / 2 + 1;

            ++i;

       }

       cout << d <<endl;

   }

   return 0;

}


// quick sort algorithm

void quick_sort(int* data,int l,int h)

{

   if (l < h)

    {

       int m = partition(data, l, h);

        quick_sort(data, l, m - 1);

        quick_sort(data, m + 1, h);

    }

}


// partition for quick sorting

int partition(int* data,int l,int h)

{

   int k = data[h];

   int j = l;

   for (int i = l; i <= h; ++i)

    {

       if (data[i] < k)

        {

            data[i] = data[i] + data[j] - (data[j] = data[i]);

            ++j;

        }

    }

   if (data[j] > k)

    {

        data[j] = data[j] + data[h] - (data[h] = data[j]);

    }

   elseif (j < h)

    {

        ++j;

        data[j] = data[j] + data[h] - (data[h] = data[j]);

    }

   return j;

}




原文链接: http://blog.csdn.net/poechant/article/details/7263850

你可能感兴趣的:(Overcome ACM POJ 2370 - Democracy in danger)