求hack+求调
查看原帖
求hack+求调
760998
rhn7楼主2025/1/12 21:54
#include<bits/stdc++.h>
#define rd(x) scanf("%lld",&x)
using namespace std;
typedef long long ll;
const ll N=3e5+5;
ll n,ans,a[N],b[N],h[N];
struct Node{
    ll v,id;
}t[N];
bool cmp(Node x,Node y){
    return x.v<y.v;
}
int main(){
    rd(n);
    for(ll i=1;i<=n;i++){
        rd(a[i]),t[i].id=i;
        if(i>1){
            if(a[i-1]<a[i]) t[i-1].v--,t[i].v++;
            else t[i-1].v++,t[i].v--;
        }
    }
    for(ll i=1;i<=n;i++) rd(b[i]);
    sort(b+1,b+n+1);
    sort(t+1,t+n+1,cmp);
    for(ll i=1;i<=n;i++) ans+=t[i].v*b[i],h[t[i].id]=i;
    printf("%lld\n",ans);ll ans2=0;
    for(ll i=1;i<=n;i++) printf("%lld ",b[h[i]]),ans2+=(i>1)*abs(b[h[i]]-b[h[i-1]]);
    assert(ans==ans2);
    return 0;
}

写了个很离谱的方法,答案倒是算对了,但构造方案有好几个不对

2025/1/12 21:54
加载中...