|
@@ -5,6 +5,7 @@
|
|
|
|
|
|
#include<iostream>
|
|
|
#include<vector>
|
|
|
+#include<string>
|
|
|
#include<algorithm>
|
|
|
using namespace std;
|
|
|
|
|
@@ -13,31 +14,61 @@ struct Wooden
|
|
|
{
|
|
|
int length;
|
|
|
int weight;
|
|
|
+ string status;
|
|
|
};
|
|
|
|
|
|
+const string CURRENT = "current";
|
|
|
+const string DELETED = "delete";
|
|
|
+
|
|
|
bool compare(Wooden a, Wooden b) {
|
|
|
return (a.length < b.length) && (a.weight < b.weight);
|
|
|
}
|
|
|
|
|
|
int calc(vector<Wooden> woodens) {
|
|
|
- int cost = 0;
|
|
|
int size = woodens.size();
|
|
|
- int index = 0;
|
|
|
- for (; size != 0; ) {
|
|
|
- if (size == 1) {
|
|
|
- cost++;
|
|
|
- break;
|
|
|
- }
|
|
|
- sort(woodens.begin(), woodens.end(), compare);
|
|
|
- Wooden node = woodens[0];
|
|
|
+ if (size == 0) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if (size == 1) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
- for (int i = 1; i < size; i++) {
|
|
|
- if (woodens.at(i).length < node.length || woodens.at(i).weight < node.weight) {
|
|
|
- woodens.erase(woodens.begin());
|
|
|
- break;
|
|
|
+ int cost = 0;
|
|
|
+ int index = -1;
|
|
|
+ Wooden node;
|
|
|
+ for (int i = 0; i < size; i++) {
|
|
|
+ if (node.status != CURRENT)
|
|
|
+ {
|
|
|
+ if (DELETED == woodens.at(i).status) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- woodens.erase(woodens.begin() + i);
|
|
|
- size = woodens.size();
|
|
|
+ else {
|
|
|
+ woodens.at(i).status = CURRENT;
|
|
|
+ cost++;
|
|
|
+ node = woodens[i];
|
|
|
+ index = i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CURRENT == woodens.at(i).status) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (woodens.at(i).length >= node.length && woodens.at(i).weight >= node.weight) {
|
|
|
+ woodens.at(i).status = DELETED;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (woodens.at(i).length <= node.length &&woodens.at(i).weight <= node.weight) {
|
|
|
+ woodens.at(index).status = DELETED;
|
|
|
+ woodens[i].status = CURRENT;
|
|
|
+ node = woodens[i];
|
|
|
+ index = i;
|
|
|
+ i = -1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (i == (size - 1)) {
|
|
|
+ woodens.at(index).status = DELETED;
|
|
|
+ index = -1;
|
|
|
+ node = Wooden{};
|
|
|
}
|
|
|
}
|
|
|
return cost;
|
|
@@ -52,12 +83,12 @@ int main()
|
|
|
cin >> n;
|
|
|
for (int j = 0; j < n; j++) {
|
|
|
cin >> l >> w;
|
|
|
- woodens.push_back(Wooden{ l,w });
|
|
|
+ woodens.push_back(Wooden{ l, w, "" });
|
|
|
}
|
|
|
cout << calc(woodens) << endl;
|
|
|
woodens.clear();
|
|
|
}
|
|
|
}
|
|
|
- return 0;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|