您的位置:首页 > 其它

Overcome ACM POJ 2370 - Democracy in danger

2012-03-20 00:00 661 查看
Problem: 2370User: Poechant
Memory: 728KTime: 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
;
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;
}

$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});

原文链接:
http://blog.csdn.net/poechant/article/details/7263850
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: