uva 11292

/*
 * 11292.cpp
 *
 *  Created on: Dec 31, 2012
 *      Author: joker
 */
#define Main 1
#define INPUT_REDIRECT "11292.test"
#if Main
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 20000 + 5;
int diameter[maxn], knights[maxn];
int main(int argc, char **argv) {
#ifndef ONLINE_JUDGE
	freopen(INPUT_REDIRECT, "r", stdin);
#endif
	int n, m;
	while (scanf("%d%d", &n, &m) == 2 && n && m) {
		for (int i = 0; i < n; ++i)
			scanf("%d", diameter + i);
		for (int i = 0; i < m; ++i)
			scanf("%d", knights + i);
		sort(diameter, diameter + n);
		sort(knights, knights + m);

		int cost = 0;
		int cur = 0;
		for (int i = 0; i < m; ++i) {
			if (knights[i] >= diameter[cur]) { //騎士能力大於等於斬殺惡龍直徑
				cost += knights[i];
				if (++cur == n)
					break;
			}
		}
		if (cur < n)
			printf("Loowater is doomed!\n");
		else
			printf("%d\n", cost);
	}
	return 0;
}
#endif

自己寫的代碼和答案還是有差距。。有些太囉嗦,簡單的事情搞複雜了。

/*
 * 11292.cpp
 *
 *  Created on: Dec 31, 2012
 *      Author: joker
 */
#define Main 0
#define INPUT_REDIRECT "11292.test"
#if Main
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;

int main(int argc, char **argv) {
#ifdef INPUT_REDIRECT
	ifstream fin(INPUT_REDIRECT, ios::in);
	cin.rdbuf(fin.rdbuf());
#endif
	int n, m, minsum;
	int tmp;
	outer: while (cin >> n >> m && (n || m)) {
		vector<int> radius;
		vector<int> knights;
		minsum = 0;
		for (int i = 0; i < n; ++i) {
			cin >> tmp;
			radius.push_back(tmp);
		}
		for (int i = 0; i < m; ++i) {
			cin >> tmp;
			knights.push_back(tmp);
		}
		sort(knights.begin(), knights.end());
		vector<int>::iterator iter;
		for (int i = 0; i < n; ++i) {
			iter = lower_bound(knights.begin(), knights.end(), radius[i]);
			if (iter == knights.end()) {
				cout << "Loowater is doomed!" << endl;
				goto outer;
			} else {
				minsum += *iter;
				knights.erase(iter);
			}
		}
		cout << minsum << endl;
	}
}
#endif


發佈了13 篇原創文章 · 獲贊 0 · 訪問量 9924
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章