# MK Beginner Round #4
## A - Nhân viên tổng đài
Người ra đề: HickWhither
Ta sẽ sử dụng mảng đếm để biết được số lần xuất hiện của mỗi phần tử trong mảng.
### Code
```cpp
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define BASEH1 31
#define ll long long
#define ld long double
int b[100000+10];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int a[n+1];
int ans=-1;
int res=-1;
for (int i=1;i<=n;i++){
cin>>a[i];
b[a[i]]++;
}
for (int i=0;i<=1e5+1;i++){
if (b[i]>ans){
ans=b[i];
res=i;
}
}
cout<<res;
}
```
## B - Lại là cấp số cộng
Người ra đề: Hnhat1234
Đây là một biến thể của bài toán dãy con tăng dài nhất.
$dp[x]$ : Cấp số cộng gồm nhiều phần tử nhất tính tới vị trí thứ $x$.
Và cuối cùng kết quả sẽ là phần tử lớn nhất trong mảng $dp$.
### Code
```cpp
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define BASEH1 31
#define ll long long
#define ld long double
vector<int> f(100000+5,1);
int a[100000+5];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,d;
cin>>n>>d;
for (int i=1;i<=n;i++){
cin>>a[i];
}
int ans=0;
for (int i=1;i<=n;i++){
for (int j=1;j<=i-1;j++){
if (a[i]-a[j]==d)
f[i]=max(f[i],f[j]+1);
}
}
for (int i=1;i<=n;i++){
ans=max(f[i],ans);
}
cout<<ans;
}
```
## C - Chia kẹo
Người ra đề: si23
Đề bài yêu cầu tìm $i + j + k = n$.
Vì $i < j < k$ mà $i + j + k = n$ $\rightarrow$ $i < n / 3$. Vậy ta sẽ duyệt $i$ từ $1 ... n / 3 - 1$. Biến đổi phương trình trên ta được $j + k = n - i$.
Bài toán quy về dạng tìm $a, b$ sao cho $a + b = x$, tổng cộng có $x$ cặp như vậy.
Nhưng đề bài yêu cầu $a < b$ nên ta sẽ loại bỏ hết các trường hợp $a > b$. Vì số trường hợp $a < b$ bằng số trường hợp $a > b$ nên ta sẽ chia $2$. Số cặp $a < b$ bằng số cặp $a > b$ vì cứ mỗi khi có một cặp $x, y$ thõa mãn, ta sẽ có thêm cặp $y, x$. Sau đó ta sẽ loại bỏ đi trường hợp $a = b$. Chỉ có một trường hợp là khi $x$ chẵn $\rightarrow$ $a = b = x / 2$, vậy khi $x$ chẵn ta sẽ trừ đi $1$.
Ngoài ra ta cần loại bỏ các trường hợp $j + k$ mà $j \le i$ $\rightarrow$ ta cần trừ thêm $i$ vào $t$ (có $i$ trường hợp $j \le i$).
### Code
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, ans(0);
cin >> n;
for (int i = 1; i < n / 3; ++i) {
int t = (n - i) / 2;
if (t % 2 == 0) t--;
ans += max(t - i, 0);
}
cout << ans;
}
```