周子寓
(zzy10124)
2024 年6 月 5 日 13:06
1
小埋的三明治序列
WA代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans,n;
vector<int> q[300001];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
int a;
cin>>a;
q[a].push_back(i);
int cnt=q[a].size()-1;
if(cnt>=2){
q[a][0]+=(cnt-1)*(q[a][cnt]-q[a][cnt-1]-1);
ans+=q[a][0];
}
}cout<<ans;
return 0;
}
金彦劭
(金彦劭)
2024 年6 月 5 日 13:22
3
核心代码:
sort(q.begin(), q.end());
for (int i = 0; i < n; i++) {
int res = 0, ans = 0, j = i + 1; //res: 当前的值 ans: 相同数中间的个数
for (; j < n; j++) {
if (q[j].first == q[j - 1].first) {
ans++;
res += ans * (q[j].second - q[j - 1].second - 1);
sum += res;
} else break;
}
i = j - 1;
}
尹思源
(。)
2024 年6 月 5 日 13:26
6
来 题解 AC了给解决法案捏(喜
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> A(n);
for(int i = 0; i < n; i++) {
cin >> A[i];
}
int count = 0;
for(int i = 0; i < n - 2; i++) {
for(int j = i + 1; j < n - 1; j++) {
for(int k = j + 1; k < n; k++) {
if(A[i] == A[k] && A[i] != A[j]) {
count++;
}
}
}
}
cout << count << endl;
return 0;
}
解释:
Input Reading :代码首先读取数组的长度(n),然后读取数组的元素(A)。
三重循环 :为了满足条件(1 \leq i < j < k \leq N),使用了三个嵌套循环:
*最外层的循环从(i = 0)到(i = n - 3)。
*中间循环从(j = i + 1)运行到(j = n - 2)。
*最内层循环从(k = j + 1)运行到(k = n - 1)。
条件检查 :对于(i, j, k)的每个组合,它检查是否(A[i] == A[k])和(A[i] \neq A[j])。
Count :如果满足条件,则增加计数。
输出 :最后,输出计数。
由于三个嵌套循环,该解决方案的时间复杂度为(O(n^3))。这对于小数组是可以接受的,但是对于较大的数组可能效率不高。如果关注效率,则可能需要探索更优化的方法,例如散列或使用额外的数据结构来降低复杂性。
周子寓
(zzy10124)
2024 年6 月 5 日 13:28
7
你觉得我会信?如果暴搜A了我就不会来问了(后面的不会)
周子寓
(zzy10124)
2024 年6 月 5 日 13:44
9
有没有人帮我调一下?
@金彦劭 这题里没有可以用pair的呀
邹丛懋1
(清醒的迷茫)
2024 年6 月 5 日 14:01
10
核心代码:
for(int i=1;i<=n;i++)
{
for(int j=1;j<v[i].size();j++)
{
ans+=(v[i][j]-v[i][j-1]-1)*j*(v[i].size()-j);//公式!!!!(我之前就错在公式上)
}
}
3 个赞