0
点赞
收藏
分享

微信扫一扫

Educational Codeforces Round 138 (Rated for Div. 2) B. Death‘s Blessing

八卦城的酒 2022-10-21 阅读 129

Educational Codeforces Round 138 (Rated for Div. 2) B. Death’s Blessing

  • 选择 a [ i ] a[i] a[i] 的话, a [ i − 1 ] + b [ i ] , a [ i + 1 ] + b [ i ] a[i-1]+b[i],a[i+1]+b[i] a[i1]+b[i],a[i+1]+b[i] ,这是对于一次操作带来的后果,如果是首位的话,只有一个相邻的会增加数值。
  • 所以我们有一种想法是,将 s o r t ( b . b e g i n ( ) , b . e n d ( ) ) sort(b.begin(),b.end()) sort(b.begin(),b.end()) 显然这样想法是错误的。例如当 a [ ] = [ 2 , 6 , 7 , 3 ] , b [ ] = [ 3 , 6 , 2 , 5 ] a[]=[2,6,7,3],b[]=[3,6,2,5] a[]=[2,6,7,3],b[]=[3,6,2,5] 。我的正确选法应该是 1 , 4 , 3 , 2 1,4,3,2 1,4,3,2
  • 由此可以看出我们只需要比较首尾 b [ i ] b[i] b[i] 的大小即可,这样看来每个数值最多被增加一次,而且最大的 b [ i ] b[i] b[i] 不会被使用,所以代码就非常简单。
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int T;cin>>T;
    while (T--)
    {
        int n;cin>>n;
        vector<int> a(n),b(n);
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n;i++) cin>>b[i];
        sort(b.begin(),b.end());
        long long res=0;
        for(int i=0;i<n;i++) res+=(a[i]+b[i]);
        cout<<res-b[n-1]<<endl;
    }
    return 0;
}
举报

相关推荐

0 条评论