zoukankan      html  css  js  c++  java
  • CodeForces

    题目链接

    题目大意

      给你两个数组,让你对b数组排序,使得所给公式算出的结果最小。

    解题思路

      思路很显然,算出来每个位置会被算上的次数然后直接乘到a上再对a排序就行了,但是有个特别坑的点就是需要先排序后取模,否则原来的大小关系就会变化。

    代码

    const int maxn = 3e5+10;
    const int maxm = 1e6+10;
    
    ll a[maxn], b[maxn], times[maxn];
    int n;
    int main() {
    	cin >> n;
    	for (int i = 1; i<=n; ++i) cin >> a[i];
    	for (int i = 1; i<=n; ++i) cin >> b[i];
    	for (int i = 1; i<=n; ++i) times[i] = 1LL*i*(n-i+1);
    	for (int i = 1; i<=n; ++i) a[i] = a[i]*times[i];
    	//for (int i = 1; i<=n; ++i) printf(i==n ? "%d
    ":"%d ", times[i]);
    	sort(a+1, a+n+1);
    	sort(b+1, b+n+1, greater<ll>());
    	ll ans = 0;
    	for (int i = 1; i<=n; ++i) ans = (ans+a[i]%MOD*b[i]%MOD)%MOD;
    	cout << ans << endl;
    	return 0;
    }
    
  • 相关阅读:
    Java attack
    Java attack
    Java attack
    Java attack
    Java attack
    Java attack -Java 中的集合
    Java attack
    迟到的《Cashflow》游戏感悟
    三读《富爸爸穷爸爸》
    安装vue开发环境→安装淘宝镜像的时候报错
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/14385997.html
Copyright © 2011-2022 走看看