/*
* 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