[NOIP2004] 合并果子

解题报告

原题参见COGS
这题,好多种解法呢。然而我一直觉得冒泡才是最优美的写法//大雾。
顺带练了一发对拍。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, num[10005];
long long ans;
void swap2(int &a, int &b) {
	int t =a;
	a = b;
	b = t;
}
int get_num() {
	int ans = 0;
	char tmp;
	tmp = getchar();
	while (tmp > '9' || tmp < '0')	tmp = getchar();
	while (tmp >= '0' && tmp <= '9') {
		ans = ans * 10 + tmp - 48;
		tmp = getchar();
	}
	return ans;
}
void he(int &a, int &b) {
	b += a;
	a = 0;
}
void buble(int cnt) {
	int i = cnt;
	while (num[i] > num[i + 1] && i < n) {
		swap2(num[i], num[i + 1]);
		i++;
	}
}
int main() {
	freopen("fruit.in", "r", stdin);
	freopen("fruit.out", "w", stdout);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		num[i] = get_num();
	}
	sort (num + 1, num + n + 1);
	for (int i = 1; i < n; i++) {
		he(num[i], num[i+1]);
		ans += num[i+1];
		buble(i + 1);
	}
	cout << ans << endl;
	return 0;
}

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理