F - Best Concatenation(贪心&排序)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了F - Best Concatenation(贪心&排序)相关的知识,希望对你有一定的参考价值。

F - Best Concatenation(贪心&排序)

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

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

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

#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";

以上是关于F - Best Concatenation(贪心&排序)的主要内容,如果未能解决你的问题,请参考以下文章

Best Cow Line-贪心策略

Best Cow Line---POJ 3617(贪心)

Codeforces 1358D - The Best Vacation (贪心)

Codeforces 1358D - The Best Vacation (贪心)

POJ 3617 Best Cow Line (贪心)

POJ 3111 K Best 贪心 二分