P12161 [蓝桥杯 2025 省 Java B] 研发资源分配

题目描述

在蓝桥科技公司,AAA 部门和 BBB 部门正在竞争一种新型 AI 芯片的研发资源。

为了公平分配资源,公司设计了一个为期 NNN 天的分配方案:

每天早上,AAA 部门和 BBB 部门各自提交一个需求等级(从 111NNN 的整数)。提交等级较高的部门获得当天的资源,资源份额等于当天的日期编号(第 111 天为 111 单位,第 222 天为 222 单位,依次递增)。若两部门提交的等级相同,则当天资源作废,双方均无法获得资源。

每个部门必须在 NNN 天内使用 111NNN 的所有等级,且每个等级只能使用一次。

有趣的是,AAA 部门在 BBB 部门内部安插了一名 “间谍”,提前获知了 BBB 部门的需求等级提交顺序,记为排列 (P1,P2,…,PNP_1, P_2, \dots , P_NP1,P2,,PN),其中 PiP_iPi 表示 BBB 部门在第 iii 天提交的需求等级。

现在,请你帮助 AAA 部门分析,在已知 BBB 部门需求等级顺序的情况下,AAA 部门的总资源份额减去 BBB 部门的总资源份额的差值最大可以是多少?

输入格式

第一行包含一个整数 NNN,表示分配方案的天数。

第二行包含 NNN 个整数 P1,P2,…,PNP_1, P_2, \dots , P_NP1,P2,,PN,表示 BBB 部门在第 111 天到第 NNN 天提交的需求等级。

输出格式

输出一个整数,表示 AAA 部门的总资源份额减去 BBB 部门的总资源份额的最大差值。

输入输出样例 #1

输入 #1

3
1 3 2

输出 #1

2

说明/提示

样例说明

AAA 部门可以选择排列 [2,1,3][2, 1, 3][2,1,3]

  • 111 天:A(=2)>B(=1)A(= 2) > B(= 1)A(=2)>B(=1)AAA 获得 111 单位资源;
  • 222 天:A(=1)<B(=3)A(= 1) < B(= 3)A(=1)<B(=3)BBB 获得 222 单位资源;
  • 333 天:A(=3)>B(=2)A(= 3) > B(= 2)A(=3)>B(=2)AAA 获得 333 单位资源。

两者的差值为 4−2=24 - 2 = 242=2

评测用例规模与约定

  • 对于 20%20\%20% 的评测用例,1≤N≤111 \leq N \leq 111N111≤Pi≤N1 \leq P_i \leq N1PiNP1,P2,…,PNP_1, P_2, \dots , P_NP1,P2,,PN 各不相同。
  • 对于 100%100\%100% 的评测用例,1≤N≤1051 \leq N \leq 10^51N1051≤Pi≤N1 \leq P_i \leq N1PiNP1,P2,…,PNP_1, P_2, \dots , P_NP1,P2,,PN 各不相同。

C++实现

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
const int N = 1e5 + 10;

struct node{
	int val, pos;
}a[N];

bool cmp(node x, node y)
{
	return x.val > y.val;
}
ll n;
ll sum; 
ll ans;

int main()
{
	cin >> n;
	sum = (1 + n) * n / 2; // 总得分
	for (int i = 1; i <= n; i++) {
		cin >> a[i].val;
		a[i].pos = i;
	}
	sort(a + 1, a + 1 + n, cmp);
	for (int i = 1; i <= n; i++) {
		sum -= a[i].pos; 
		ans = max(ans, sum - a[i].pos);
	}
	cout << ans;
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐