为什么WA了一个点
查看原帖
为什么WA了一个点
1431464
zal210楼主2024/11/24 12:47
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn = 1e4+66;

int n, m, w;
ll ans;
struct cut
{
	int x, y;//x表示代价,y表示是横线还是竖线 
}ch[maxn];

bool cmp(cut a, cut b)
{
	return a.x > b.x;
} 

int main()
{
	scanf("%d%d", &n, &m);
	w = n+m-2;	
	for (int i=1; i<=w; i++)
	{
		int a;
		scanf("%d", &a);
		if(i <= n-1)
			ch[i].y = 0;//0表示这条线是横线 
		else 
			ch[i].y = 1;//1表示这条线是竖线 
		ch[i].x = a;
	}
	
	sort(ch+1, ch+w+1, cmp);//结构体排序
	
	int h=1, l=1;//记录已经切了多少条横线或竖线 
	for (int i=1; i<=w; i++)//枚举每一条线 
	{
		if(ch[i].y == 0)//判断是横线还是竖线 
		{
			ans += (l*ch[i].x);
			h++; 
		}
		else
		{
			ans += (h*ch[i].x);
			l++;
		}
	} 
	
	printf("%lld", ans); 
	return 0;
}
2024/11/24 12:47
加载中...