0
点赞
收藏
分享

微信扫一扫

F - Best Concatenation(贪心&排序)


F - Best Concatenation(贪心&排序)

考虑相邻两个串的相对位置,若这两个串看成一个整体,则相对位置带对答案的统计没有影响。

因此我们只需比较整体内部的贡献,看前面串的个数和后面串的数字之和的乘积谁大即可。

时间复杂度:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int const N=233333;
int n,ans,a[N],b[N],p[N];
string t,s[N];
signed main(){
ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i],p[i]=i;
for(char j:s[i])
j=='X'?a[i]++:b[i]+=j-48;
}
sort(p+1,p+1+n,[](int x,int y){
return a[x]*b[y]>a[y]*b[x];
});
for(int i=1;i<=n;i++)
t+=s[p[i]];
int cnt=0,res=0;
for(char i:t)
i=='X'?cnt++:res+=(i-48)*cnt;
cout<<res<<"\n";
}


举报

相关推荐

0 条评论