• Codeforces Round #560 (Div. 3) E题


    题目网址:http://codeforces.com/contest/1165/problem/E

    题目大意:给出2组数a[n]和b[n] ,b[n] 数的位置可以变化,定义 F( l , r ) = ∑ ( ai*bi ),且  l <= i <= r,求 ∑ F( l,r )的最小值,其中 1<=l <=r <=n.

    题解:首先看看F函数有什么特性,根据  r>=l,可知 ∑ F( l,r)=F(1,1)+F(1,2)+……F(1,n)+F(2,2)+F(2,3)+……F(2,n)………………

    则列举得,a1*b1有n个,a2*b2有2*(n-1)个则 ai*bi有 i * (n-i+1)个,即求 ∑ai*bi*(n-i+1)*i 的最小值,i介于1~n,又ai是不变的,则该式子只取决于bi的大小,所以只需倒序匹配即可

     1 #include<bits/stdc++.h>
     2 #define ll long long 
     3 const int maxn=2e5+7;
     4 const int mod=998244353;
     5 using namespace std;
     6 ll a[maxn],b[maxn];
     7 bool cmp(ll x,ll y)
     8 {
     9     return x>y;
    10 }
    11 int main()
    12 {
    13     int n;
    14     cin>>n;
    15     for(int i=1;i<=n;i++) {
    16         scanf("%I64d",&a[i]);
    17         a[i]=a[i]*i*(n-i+1);
    18     }
    19     for(int i=1;i<=n;i++) scanf("%I64d",&b[i]);
    20     sort(a+1,a+1+n);
    21     sort(b+1,b+1+n,cmp);
    22     ll ans=0;
    23     for(int i=1;i<=n;i++) {
    24         ans+=(a[i]%mod*b[i]%mod)%mod;
    25         ans=ans%mod;
    26     }
    27     cout<<ans%mod<<endl;
    28       return 0;
    29 }
    View Code
  • 相关阅读:
    010-1 Socket地址族AddressFamily
    011 Socket定义客户端
    003 win7如何配置adb环境变量
    002 调试工具的具体功能
    001 Nibiru SDK 调试工具介绍
    001 UI介绍
    010 socket定义服务器
    001 Lua相关链接
    000 Lua目录
    深拷贝的、浅拷贝讲解以及示例
  • 原文地址:https://www.cnblogs.com/duxing201806/p/10886176.html
Copyright © 2020-2023  润新知