牛课算法周周练1

时间:2020-04-07
本文章向大家介绍牛课算法周周练1,主要包括牛课算法周周练1使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

https://ac.nowcoder.com/acm/contest/5086

A  Maximize The Beautiful Value

T组样例

n个数和k(最少移动的次数)

非递减序列

求最大的值

思路: 

be记录原始序列的和

sum[]记录前缀和

now = be + (sum[i - 1] + sum[ i - k - 1] - k * a[i];

取最大值

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e5 + 10;
int t,n,k;
int a[maxn],sum[maxn];
signed main(){
    //freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    cin >> t;
    while(t--) {
        cin >> n >> k;
        int ans = -0x3f3f3f3f;
        int be = 0;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            sum[i] = sum[i - 1] + a[i];
            be += i * a[i];
        }
        for(int i = k + 1; i <= n; i++){
            int now = be + (sum[i - 1] - sum[i - k - 1]) - a[i] * k;
            ans = max(ans,now);
        }
        cout << ans << endl;
    }
    return 0;
}

E 幸运数字Ⅱ

这个题最大的一个问题就是超时

绞尽脑汁解决TLE 太浪费时间了

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 1e9;
int l,r;
int ans;
set<int> s;
priority_queue<int,vector<int>,greater<int>> que;
void bfs(){
    que.push(4);
    que.push(7);
    while(1){
        int tp = que.top();
        que.pop();
        s.insert(tp);
        if(tp > maxn) break;
        que.push(tp * 10 + 4);
        que.push(tp * 10 + 7);
    }
}
signed main(){
    //freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    bfs();
    cin >> l >> r;
    while(l <= r){
        int g = *s.lower_bound(l);
        ans += (min(g,r) - l + 1) * g;
        l = g + 1;
    }
    cout << ans << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/xcfxcf/p/12655868.html