---
# System prepended metadata

title: CaiWinDao và 3 em gái
tags: [LQDOJ]

---

---
tags: LQDOJ
title: CaiWinDao và 3 em gái
author: Editorial-Slayers Team
license: Public domain
---

<style>
    .markdown-body { max-width: 2048px; }
</style>

$\Huge \text{🌱 CaiWinDao và 3 em gái}$

-----

###### 🔗 Link: [[CaiWinDao và 3 em gái](https://lqdoj.edu.vn/problem/sisters)]
###### 📌 Tags: Greedy
###### 👤 Writter: @thanhchauns2
###### 👥 Contributor: 
###### 📋 Content:

[TOC]



-----
## Hướng dẫn
Gọi tổng số kẹo là $X$, số dư của phép chia $\frac{X}{3}$ is $Y$, bài toán có thể được chia thành một vài trường hợp:
Case 1: Nếu ($Y = 0$), lấy toàn bộ số kẹo.
Case 2: Nếu ($Y = 1$):
        - Loại bỏ một túi với số lượng kẹo chia $3$ dư $1$, hoặc
        - Loại bỏ hai túi với số lượng kẹo chia $3$ dư $2$.
Case 3: Nếu ($Y = 2$):
        - Loại bỏ một túi với số lượng kẹo chia $3$ dư $2$, hoặc
        - Loại bỏ hai túi với số lượng kẹo chia $3$ dư $1$.
Tất nhiên chúng ta cần check tính khả thi của các trường hợp, hoặc đáp án sẽ bị sai.


-----
### Code

> **Time:** $O(nlogn)$
> **Space:** $O(n)$ 
> **Algo:** sorting
> [color=lightgreen]

:::success
:::spoiler Code 
```cpp=

#include <bits/stdc++.h>
using namespace std;
signed main()
{
    int a;
    cin >> a;
    long long ans = 0;
    vector<long long> C[3];
    for (int i = 0; i < a; i++)
    {
        long long x;
        cin >> x;
        ans += x;
        C[x % 3].push_back(x);
    }
    for (int i = 0; i < 3; i++) sort(C[i].begin(), C[i].end());
    if (ans % 3 == 0)
    {
        cout << ans / 3 << endl;
        return 0;
    }
    if (ans % 3 == 1)
    {
        long long k = 1e17, q = 1e17;
        if (!C[1].empty()) k = C[1][0];
        if (C[2].size() > 1) q = C[2][0] + C[2][1];
        cout << (ans - min(k, q)) / 3 << endl;
        return 0;
    }
    if (ans % 3 == 2)
    {
        long long k = 1e17, q = 1e17;
        if (!C[2].empty()) k = C[2][0];
        if (C[1].size() > 1) q = C[1][0] + C[1][1];
        cout << (ans - min(k, q)) / 3 << endl;
        return 0;
    }
}
```
:::

-----
## Bonus

Bạn có thể giải với trường hợp mỗi gói kẹo chỉ chia cho 1 người không?