欢乐赛#55 T6 题解
2025-09-03 11:20:50
发布于:北京
5阅读
0回复
0点赞
用 map 和 set 解决
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,ans,cnt;
ll a[200005];
map<ll,set<ll>> b;//分别指颜色以及所有该颜色宝石的编号
int main(){
cin>>n;
for (ll i=1;i<=n;i++){
cin>>a[i];
b[a[i]].insert(i);//添加颜色为 a[i] 的宝石的编号
}
for (auto i=b.begin();i!=b.end();i++){//auto 表示 map<ll,set<ll>>::iterator
cnt=0;//美丽值
for (auto j=i->second.begin();j!=i->second.end();j++){//auto 表示 set<ll>::iterator
cnt^=*j;//按位异或运算^
}
ans+=cnt*i->first;//美丽值加入总和
}
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个