

Cho hai dãy số a1,a2,…,aNa1,a2,…,aN và b1,b2,…,bNb1,b2,…,bN là hai hoán vị của dãy 1,2,…,N1,2,…,N.
Trong một lần thực hiện hành động, bạn có thể dịch chuyển dãy aa bằng cách đưa phần tử đầu tiên ra cuối cùng. Cụ thể: từ dãy a1,a2,…,aNa1,a2,…,aN ta được dãy a2,…,aN,a1a2,…,aN,a1.
Yêu cầu: Thực hiện số lần hành động bất kỳ để tối đa hóa số chỉ số ii sao cho ai=biai=bi. Hãy in ra số lượng chỉ số như vậy lớn nhất có thể.
Dữ liệu vào
Dữ liệu ra
Giới hạn
Sample Input 1
5
1 2 3 4 5
2 3 4 5 1
Sample Output 1
5
Sample Input 2
4
1 3 2 4
4 2 3 1
Sample Output 2
2
Code C++ ạ
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
Ý tưởng:
- Vì mỗi thao tác đẩy phần tử đầu tiên -> cuối cùng nên ta có thể coi đây là thao tác dịch trái 1 lần
- Do đó, lưu lại khoảng cách tính từ giá trị X của mảng a đến giá trị X của mảng b về phía bên trái (tức cần dịch trái bao nhiêu lần để $a_i$ = $b_i$)
- Sau khi đã lưu lại khoảng cách, ta đếm tần suất xuất hiện của mỗi số, tìm số có tần suất lớn nhất là kết quả (vì khi dịch từng đó thao tác, ta có số phần tử đúng lớn nhất)
Code C++:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[200005], b[200005], m[200005], pos[200005];
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int n, kq = 0;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i], pos[a[i]] = i;
for (int i = 0; i < n; i++)
{
cin >> b[i];
int k = pos[b[i]] - i;
if (k < 0)
k += n;
m[k]++;
kq = max(kq, m[k]);
}
cout << kq;
return 0;
}Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
`\color{pink}{#Bơ}`
#include <bits/stdc++.h>
using namespace std;
#define f(i,n) for(int i=0;i<n;i++)
#define pb push_back
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n; cin >> n;
vector<int> a(n), b(n), vt(n+1);
f(i,n) cin >> a[i];
f(i,n) { cin >> b[i]; vt[b[i]] = i; }
map<int,int> mp;
f(i,n) mp[(vt[a[i]] - i + n) % n]++;
int ma = 0;
for (auto [_,v] : mp) ma = max(ma,v);
cout << ma;
}
`\color{#1AD5F7}{⋆⟡H}\color{#1AD5F7}{a}\color{#4DA6E6}{r}\color{#668EDD}{i}\color{#8077D5}{i}\color{#995FCD}{i}\color{#EA2F90}{⟡⋆}`
Hãy giúp mọi người biết câu trả lời này thế nào?
![]()
Bảng tin
1726
6471
2587
đúng là bố kaiz
1726
6471
2587
bóc kẹo cho e ăn =))))