美团8.19 ak

不保证代码能跑,代码是从clion的历史版本扒出来的不一定是最后提交的版本

第一题,忘了,文件也找不到了pass

第二题,

#include<iostream>
#include "algorithm"
#define ll long long
using namespace std;

int main(){
     ll n;
     cin>>n;

     ll sum = 0;
     ll* values = new ll[n];
     for(int i = 0 ; i < n; ++i){
         cin >> values[i];
         sum += values[i];
     }
     ll maxgain = 0;
     for(int i = 0 ; i < n - 1 ; ++i){
         ll gain = values[i]*values[i+1] - values[i] - values[i+1];
         maxgain = max(maxgain, gain);
     }
     cout<<sum + maxgain<<endl;
}

第三题,注意到合法的串只能是010101或者101010就很简单

#include<iostream>
#include "algorithm"
#include "string"
#define ll long long
#include "vector"
using namespace std;

int main(){
    string s;
    cin >> s;
    ll count = 0;
    ll size = s.size();
    vector<vector<ll>> dp1(size, vector<ll>(size, 0));
    vector<vector<ll>> dp2(size, vector<ll>(size, 0));

    for(int i = 0 ; i < size ; ++i){
        if(i%2 == 1){
            if(s[i] == '0'){
                dp1[i][i] = 1;
            }else{
                dp2[i][i] = 1;
            }
        }else{
            if(s[i] == '1'){
                dp1[i][i] = 1;
            }else{
                dp2[i][i] = 1;
            }
        }
    }

    for(int i = 0 ; i < size; ++i){
        for(int j = i+1 ; j < size; ++j){
            if(j%2 == 0){
                if(s[j] == '1'){
                    dp1[i][j] = dp1[i][j-1] + 1;
                    dp2[i][j] = dp2[i][j-1];
                }else{
                    dp2[i][j] = dp2[i][j-1] + 1;
                    dp1[i][j] = dp1[i][j-1];
                }
            }else{
                if(s[j] == '1'){
                    dp2[i][j] = dp2[i][j-1] + 1;
                    dp1[i][j] = dp1[i][j-1];
                }else{
                    dp1[i][j] = dp1[i][j-1] + 1;
                    dp2[i][j] = dp2[i][j-1];
                }
            }

            count += min(dp1[i][j], dp2[i][j]);
        }
    }

    cout << count;
    return 0;
}

第四题,dp,前i位分配j个有多少种分配方法

#include "iostream"
#include "vector"
#define ll long long
#define base 1000000007
using namespace std;

int main(){
    int n;
    cin >> n;

    int* a = new int[n];
    int suma = 0;
    for(int i = 0 ; i < n ; ++i){
        cin >> a[i];
        suma += a[i];
    }

    vector<vector<ll>> dp(n, vector<ll>(suma+1, 0));
    for(int i = 1 ; i < suma; ++i){
        if(i!=a[0])
            dp[0][i] = 1;
    }
    for(int i = 1; i < n; ++i){
        for(int j = i + 1; j <= suma; ++j){
            ll count = 0;
            for(int front = 1; front < j; ++front){
                if(j - front != a[i])
                    count = (count + dp[i-1][front]) % base;
            }
            dp[i][j] = count;
        }
    }
    cout << dp[n-1][suma];
}

第五题,分类讨论,能平均就得把所有数据变成一样的,不能平均就需要舍弃一个,把其余的变成一样的,舍弃的应当是最大值或者最小值,剩余的数字变成剩余数字的平均值(向下取整以及向下取整加一都有可能)

#include<iostream>
#include "algorithm"
#include "string"
#define ll long long
#include "vector"
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<ll> a(n, 0);
    ll ssum = 0;

    for(int i = 0 ; i < n ; ++i){
        cin >> a[i];
        ssum += a[i];
    }

    ll count = 0;
    if(ssum % n == 0){
        ll avg = ssum / n;
        for(auto it: a){
            if(it > avg){
                count += (it - avg);
            }
        }
        cout << count << endl;
    }else{
        // 需要抛弃一个值
        ll toPrint;
        sort(a.begin(), a.end());
        //放弃第一个
        ll sumWithoutFirst = 0;
        for(int i = 1 ; i < n; ++i){
            sumWithoutFirst += a[i];
        }
        ll newAvg = sumWithoutFirst / (n-1);
        ll changeNeg = 0, changePos = 0;
        for(int i = 1 ; i < n; ++i){
            if(a[i] > newAvg){
                changePos += (a[i]-newAvg);
            }else{
                changeNeg += (newAvg - a[i]);
            }
        }
        toPrint = max(changeNeg, changePos);

        changeNeg = 0, changePos = 0;
        newAvg ++;
        for(int i = 1 ; i < n; ++i){
            if(a[i] > newAvg){
                changePos += (a[i]-newAvg);
            }else{
                changeNeg += (newAvg - a[i]);
            }
        }
        toPrint = min(toPrint, max(changeNeg, changePos));

        // 抛弃最后一个
        ll sumWithoutLast = 0;
        for(int i = 0 ; i < n-1; ++i){
            sumWithoutLast += a[i];
        }
        newAvg = sumWithoutLast / (n-1);

        changeNeg = 0, changePos = 0;
        for(int i = 0 ; i < n-1; ++i){
            if(a[i] > newAvg){
                changePos += (a[i]-newAvg);
            }else{
                changeNeg += (newAvg - a[i]);
            }
        }
        toPrint = min(toPrint, max(changeNeg, changePos));

        newAvg++;
        changeNeg = 0, changePos = 0;
        for(int i = 0 ; i < n-1; ++i){
            if(a[i] > newAvg){
                changePos += (a[i]-newAvg);
            }else{
                changeNeg += (newAvg - a[i]);
            }
        }
        toPrint = min(toPrint, max(changeNeg, changePos));
        cout<<toPrint;
    }
}

#美团笔试#
全部评论
大佬你很强👍 我现在不好奇题是怎么解的🤔我就想知道你力扣刷多少道,是比赛选手吗🤔这种题是遇到过?还是也没遇到过但是靠智商就碾过去啦?
1 回复 分享
发布于 2023-08-20 01:02 北京
确实强,手法上就能看到熟练度
1 回复 分享
发布于 2023-08-19 22:11 辽宁
第四题 初始化的时候 dp[0][i]=1 这个i如果是300-500之间的话,没有可用的元素吧,因为元素取值的最大值是300。
点赞 回复 分享
发布于 2023-08-20 13:59 四川
大佬你很强👍 我现在不好奇题是怎么解的🤔我就想知道你力扣刷多少道,是比赛选手吗🤔这种题是遇到过?还是也没遇到过但是靠智商就碾过去啦?
点赞 回复 分享
发布于 2023-08-20 07:12 贵州
第三题拿java过不去服了
点赞 回复 分享
发布于 2023-08-19 23:35 江苏
大佬,第5题不用考虑除完是小数,然后要四舍五入的情况吗?没看到你的处理手法
点赞 回复 分享
发布于 2023-08-19 22:55 辽宁
学习一下!
点赞 回复 分享
发布于 2023-08-19 22:26 陕西

相关推荐

12-02 21:34
中南大学 Java
我这边应该算是华为第一批开奖的了,还是要11月底才开,不过今年的流程整体比去年确实要开得早,这一点还是值得表扬的。然后华为也确实很有诚意,给我这样bg的硕鼠开了15a,并且base地还是在杭州,应该是buff拉满了,但凡其他公司开的没这个高,and对象没签上海,可能真选择成为华孝子了。虽然很有诱惑力,但是这个15a的offer里面确实还是有猫腻的:1.&nbsp;薪资构成是这样的,15a&nbsp;=&nbsp;(基本工资+绩效工资)*12&nbsp;+&nbsp;10w年终,虽然绩效工资hr说100%能拿满,年终大部分都能拿满,绩效工资能拿满我可能还选择相信,但10w年终还能拿满,这我就存疑了。反正看了一圈别家的公司报价都是报一般情况下能拿多少年终,比如美团0-6个月,就报3.5个月,但是华似乎是喜欢往最高了报,所以估计10w年终拿满应该也是极少数人。2.&nbsp;公积金只交5%,并且缴纳基数还只是按基本工资交的,这里看似每个月到手的钱变多了,但是总体算下来,可能一年比别家就少拿1-2w。3.&nbsp;月末周六要加班,可以选择调休或双倍加班费,并且平常应该也会加班,感觉不大会像hr说的124能8.30下班,35能5.30下班的,云计算bu强度应该还算比较好的,估计一般情况下9-9-5吧,但是不知道并入ict后会如何。4.&nbsp;还有相关的业务线,听说8,9月份云计算bu内部已经调整了一波,好像还要并入ict下面了,感觉未来的不确定性也比较大。5.&nbsp;华为的认可度应该比不过传统的互联网大厂,技术的前瞻性应该也比不过(个人看法)。6.&nbsp;培养和升职,感觉美团可能更有说法,毕竟见到过1年升L6的,甚至还有两年升L7的,对华为的了解相对较少,只知道华为可能相对稳定一些?毕竟4年一签?综上,还是决定放弃华,准备去团吧,自己选的路,希望不会后悔吧。
变形钢筋:这个薪资结构,年终奖是画大饼啊
OC/开奖
点赞 评论 收藏
分享
11-07 16:07
深圳大学 运营
前端飞升:学长,阿里不是卡双非吗,我深也能去吗
点赞 评论 收藏
分享
评论
19
54
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务