# NDI122K21 - COMPLETE SUBMIT
**BÀI 1 - TẶNG QUÀ**
```c++
#include <bits/stdc++.h>
using namespace std;
const int X = 3e5 + 35;
int n, d = 0, x, F[X];
bool ifperfect_ok(int q)
{
int T = 0, k = sqrt(q);
for (int i = 1; i <= k; i++)
T += ((q % i == 0) ? i + q / i : 0);
return (T == 2 * q);
}
signed main()
{
freopen("QUA.INP", "r", stdin);
freopen("QUA.OUT", "w", stdout);
cin.tie(NULL)->sync_with_stdio(false);
cin >> n;
for (int p = 1; p <= n; p++)
{
cin >> x;
if (ifperfect_ok(x)) F[++d] = x;
}
cout << d << "\n";
for (int i = 1; i <= d; i++) cout << F[i] << " ";
return 0;
}
```
**BÀI 2 - CHỌN BI**
```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
const lli E = 1e5 + 15;
lli T, n, m, d = 0;
struct marblebox
{
lli a, b;
};
marblebox Bx[E];
bool cmp(marblebox X, marblebox Y)
{
return X.b > Y.b;
}
signed main()
{
cin.tie(NULL)->sync_with_stdio(false);
freopen("CHONBI.INP", "r", stdin);
freopen("CHONBI.OUT", "w", stdout);
cin >> n >> m;
for (lli i = 1; i <= m; i++) cin >> Bx[i].a >> Bx[i].b;
T = 0;
sort(Bx + 1, Bx + m + 1, cmp);
while (n > 0 || d < m)
{
lli k = min(n, Bx[++d].a);
T += Bx[d].b * k;
n -= k;
}
cout << T;
return 0;
}
```
**BÀI 3 - DÃY ĐẸP**
```c++
#include <bits/stdc++.h>
using namespace std;
map <int, int> cnt;
map <int, int>::iterator it;
int n, x, del = 0;
signed main()
{
freopen("DAYDEP.INP", "r", stdin);
freopen("DAYDEP.OUT", "w", stdout);
cin.tie(NULL)->sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; i++) { cin >> x; cnt[x]++; }
for (it = cnt.begin(); it != cnt.end(); it++)
if (it->second >= it->first) del += it->second - it->first;
else del += it->second;
cout << del;
return 0;
}
```
**BÀI 4 - CHỌN ĐỘI TUYỂN**
```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
lli h, s, g, p, t, n;
string name;
signed main()
{
cin.tie(NULL) -> sync_with_stdio(false);
freopen("CHONDOI.INP", "r", stdin);
freopen("CHONDOI.OUT", "w", stdout);
cin >> n;
h = s = g = p = t = 0;
for (lli x = 1; x <= n; x++)
{
cin >> name;
h += (name[0] == 'H');
s += (name[0] == 'S');
g += (name[0] == 'G');
p += (name[0] == 'P');
t += (name[0] == 'T');
}
cout << h*s*g + h*s*p + h*s*t + h*g*p + h*g*t + h*p*t + s*g*p + s*g*t + s*p*t + g*p*t;
return 0;
}
```