求助
查看原帖
求助
977778
__Harry_Haiyun__楼主2024/1/26 21:31
#include <bits/stdc++.h>
#define int long long
#define iostream() ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
using namespace std;
const int maxn = 1e6+7;
const int MAXN = maxn / 2;
int n,m,a[maxn],tmp,ff,maxsum,minsum;
string s[maxn];
int f()
{
	int cnt = 0;
	sort(s,s + m);
	for (int i = 0; i < m - 1; i++)
		if (s[i] != s[i + 1])
			cnt++;
	return cnt;
} //找有多少种水果
signed main()
{
	//输入与输出
    iostream();
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < m; i++) cin >> s[i];
    ff = f();
    int fruit[ff];
    sort(a,a + n);
    
    //水果数量名称统计
    for (int i = 0; i < m - 1; i++)
    {
    	if (s[i] == s[i + 1]) 
			fruit[tmp]++;
    	else tmp++;
	}
    sort(fruit,fruit + ff);
    
    //求最小值
    for (int i = 0; i < ff; i++)
	    minsum += fruit[i] * a[i];
	cout << minsum << '\n';
	
	//数组翻转
	for (int i = 0,j = n - 1; i <= n / 2,j >= n / 2; i++,j--)
		swap(a[i],a[j]);
	for (int i = 0,j = ff - 1; i <= ff / 2,j >= ff / 2; i++,j--)
		swap(s[i],s[j]);
		
	//求最大值
	for (int i = 0; i < ff; i++)
	    maxsum += fruit[i] * a[i];
	cout << maxsum << '\n';
 	return 0;
}

自我感觉还很有道理,没想到交上去全错

2024/1/26 21:31
加载中...