Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <algorithm>
- bool exists(std::vector<int>, int);
- using namespace std;
- int main() {
- int n;
- cin >> n;
- vector<int> vec;
- for (int i = 0; i < n; i++) {
- int temp;
- cin >> temp;
- vec.push_back(temp);
- }
- sort(vec.begin(), vec.end());
- int c = 0;
- while (vec.size() > 0) {
- for (int i = 0; i < vec.size(); i++) {
- if (vec[i] == 1) {
- if (exists(vec, 3)) {
- vec.erase(vec.begin() + i);
- vec.erase(find(vec.begin(), vec.end(), 3));
- c++;
- }
- else if (exists(vec, 2)) {
- if (exists(vec, 1) && count(vec.begin(), vec.end(), 1) > 1) {
- vec.erase(find(vec.begin(), vec.end(), 1));
- vec.erase(find(vec.begin() + i + 1, vec.end(), 1));
- vec.erase(find(vec.begin(), vec.end(), 2));
- c++;
- }
- else {
- vec.erase(find(vec.begin(), vec.end(), 1));
- vec.erase(find(vec.begin(), vec.end(), 2));
- c++;
- }
- }
- else if (count(vec.begin(), vec.end(), 1) > 1) {
- if (count(vec.begin(), vec.end(), 1) >= 4)
- {
- for (int j = 0; j < 4; j++) {
- vec.erase(find(vec.begin(), vec.end(), 1));
- }
- }
- else {
- for (int j = 0; j < count(vec.begin(), vec.end(), 1); j++) {
- vec.erase(find(vec.begin(), vec.end(), 1));
- }
- }
- cout << endl;
- c++;
- }
- }
- else if (vec[i] == 2) {
- if (exists(vec, 2) && count(vec.begin(), vec.end(), 2) > 1) {
- vec.erase(find(vec.begin(), vec.end(), 2));
- vec.erase(find(vec.begin(), vec.end(), 2));
- c++;
- }
- else {
- vec.erase(find(vec.begin(), vec.end(), 2));
- c++;
- }
- }
- else if (vec[i] == 3) {
- vec.erase(find(vec.begin(), vec.end(), 3));
- c++;
- }
- else {
- vec.erase(find(vec.begin(), vec.end(), 4));
- c++;
- }
- }
- }
- cout << c;
- return 0;
- }
- bool exists(vector<int> v, int x) {
- if (find(v.begin(), v.end(), x) != v.end())
- return true;
- else
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement