Overcome ACM POJ 2370 - Democracy in danger

本文介绍了使用排序算法解决特定问题的方法,通过快速排序实现数据的高效组织,并计算了特定统计数据,展示了算法在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    /*

     * 作者: 柳大·Poechant

     * 博客: http://blog.youkuaiyun.com/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;

    }



    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    钟超

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值