zoukankan      html  css  js  c++  java
  • Codeforces Round #376 (Div. 2) F. Video Cards 前缀和

    F. Video Cards

    链接:

    http://codeforces.com/contest/731/problem/F

    题意:

    给一个n长度的序列,问从序列中找一个数作为第一个数,把不小于它的数变成它或者它的倍数(不是他的倍数时只能减小成为他的倍数),并使得这些数的和最大。

    题解:

    对所有数进行排序,从前到后枚举每个数成为第一个数,然后枚举倍数j,找到在这个数j倍的数目,然后和这个数相乘,然后求和取最大就可以了。

    注意要去重。

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 typedef long long ll;
     6 const int maxn = 2e5 + 7;
     7 ll a[maxn];
     8 
     9 int main()
    10 {
    11     int n;
    12     cin >> n;
    13     for (int i = 0; i < n; i++) cin >> a[i];
    14     sort(a, a + n);
    15     ll ans = 0;
    16     for (int i = 0; i < n; i++) {
    17         ll sum = 0;
    18         if ((a[i] != a[i - 1]) || (i == 0)) {
    19             for (ll j = a[i]; j <= a[n - 1]; j += a[i]) {
    20                 ll k = upper_bound(a, a + n, j - 1) - a;
    21                 sum += (n - k)*a[i];
    22             }
    23             ans = max(ans, sum);
    24         }
    25     }
    26     cout << ans << endl;
    27     return 0;
    28 }
  • 相关阅读:
    implicit request ?
    Scala curly braces & parenthesis
    play framework Reads[A] and, andThen, reduce
    play framework 中耍 JSON 基礎
    asynchronous
    第一次接觸sbt會遇到的
    SBT, activator, play之間的糾葛
    leetcode67
    leetcode26
    leetcode341
  • 原文地址:https://www.cnblogs.com/baocong/p/5979337.html
Copyright © 2011-2022 走看看