题解:P12161 [蓝桥杯 2025 省 Java B] 研发资源分配
题解:P12161
25 分代码
看到这道题时第一个想到的是双指针。我们可以用两个指针记录当前
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,p[100005],tmp_a[100005],sum_a,sum_b;
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>p[i];
for(int i=1;i<=n;i++)tmp_a[i]=i;
int l=1,r=n;
for(int i=n;i>=1;i--){
int t=p[i];
if(tmp_a[r]>t)sum_a+=i,r--;
else{
if(t!=tmp_a[l])sum_b+=i;
l++;
}
}
cout<<sum_a-sum_b;
return 0;
}
提交之后,等待 AC,却只有 25 分。
到底是哪里错了呢?原来如果当前
我们通过观察发现,可以先把
AC 代码如下
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,ans,sum;
struct node{
int v,id;
}p[100005];
bool cmp(node a,node b){
return a.v>b.v;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i].v;
p[i].id=i;
}
ans=(n+n*n)/2;
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;i++){
ans-=p[i].id;
sum=max(sum,ans-p[i].id);
}
cout<<sum;
return 0;
}
最后提醒大家:十年 OI 一场空,不开 __ 见祖宗。
蒟蒻刚写没几篇题解,各位巨佬多指教。