3.18上午美团暑期实习第二次笔试 AK

1、二维前缀和

#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;

const int N=1005;

int g[N][N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n,a,b;
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        g[x][y]++;
    }
    for(int i=1;i<=1000;i++)
    {
        for(int j=1;j<=1000;j++)
        {
            g[i][j]+=g[i-1][j]+g[i][j-1]-g[i-1][j-1];
        }
    }
    int ans=0;
    for(int i=1;i<=1000;i++)
    {
        for(int j=1;j<=1000;j++)
        {
            ans=max(ans,g[i][j]-g[max(0,i-a-1)][j]-g[i][max(0,j-b-1)]+g[max(0,i-a-1)][max(0,j-b-1)]);
        }
    }
    cout<<ans<<endl;
    return 0;
}

2、set

#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;

const int N=2e5+1000;

int n,k,a[N];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];

    int ans=0;
    for(int i=1;i<=n;i++)
    {
        set<int> s;
        int j=i;
        while(j<=n)
        {
            s.insert(a[j]);
            if(s.size()>k)
                break;
            j++;
        }
        ans=max(ans,j-i);
    }
    cout<<ans<<endl;
    return 0;
}

3、corner case挺多的

#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;

const int N=2e5+1000;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);


    string s;
    cin>>s;
    int n=s.size();
    s='#'+s;
    int l=1,r=n;
    vector<pii> pos;
    while(l<r)
    {
        if(s[l]!=s[r])
            pos.push_back({l,r});
        l++,r--;
    }
    sort(pos.begin(),pos.end());
    if(pos.size()==0)
    {
        for(int i=1;i<=n;i++)
        {
            if(s[i]!='a')
            {
                s[i]=s[n-i+1]='a';
                break;
            }
        }
    }
    else if(pos.size()==1)
    {
        if(s[pos[0].x]=='a'||s[pos[0].y]=='a')
        {
            if(n&1)
            {
                s[(n+1)/2]='a';
            }
        }
        s[pos[0].x]=s[pos[0].y]='a';
    }
    else
    {
        char c=min(s[pos[0].x],s[pos[0].y]);
        s[pos[0].x]=s[pos[0].y]=c;
        c=min(s[pos[1].x],s[pos[1].y]);
        s[pos[1].x]=s[pos[1].y]=c;
    }

    for(int i=1;i<=n;i++)
        cout<<s[i];
    return 0;
}

4、背包dp

#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;

const int N=2e5+1000;

int a[N],b[N];
int dp[105][5005][55],cost[105][5005][55];

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n,x,y;
    cin>>n>>x>>y;
    for(int i=1;i<=n;i++)
        cin>>a[i]>>b[i];

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=x;j++)
        {
            for(int k=0;k<=y;k++)
            {
                dp[i][j][k]=dp[i-1][j][k];
                cost[i][j][k]=cost[i-1][j][k];
                if(j-a[i]>=0)
                {
                    if(1+dp[i-1][j-a[i]][k]>dp[i][j][k])
                    {
                        dp[i][j][k]=1+dp[i-1][j-a[i]][k];
                        cost[i][j][k]=cost[i-1][j-a[i]][k]+a[i];
                    }
                    else if(1+dp[i-1][j-a[i]][k]==dp[i][j][k])
                        cost[i][j][k]=min(cost[i][j][k],cost[i-1][j-a[i]][k]+a[i]);
                }
                if(j-b[i]>=0&&k>=1)
                {
                    if(1+dp[i-1][j-b[i]][k-1]>dp[i][j][k])
                    {
                        dp[i][j][k]=1+dp[i-1][j-b[i]][k-1];
                        cost[i][j][k]=cost[i-1][j-b[i]][k-1]+b[i];
                    }
                    else if(1+dp[i-1][j-b[i]][k-1]==dp[i][j][k])
                        cost[i][j][k]=min(cost[i][j][k],cost[i-1][j-b[i]][k-1]+b[i]);
                }
            }
        }
    }
    int mn=1e9;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=x;j++)
        {
            for(int k=0;k<=y;k++)
            {
                //cout<<i<<" "<<j<<" "<<k<<" "<<dp[i][j][k]<<" "<<cost[i][j][k]<<endl;
                if(dp[i][j][k]==dp[n][x][y])
                    mn=min(mn,cost[i][j][k]);
            }
        }
    }
    cout<<dp[n][x][y]<<" "<<mn<<endl;
    return 0;
}

5、dfs

#include<bits/stdc++.h>
#define x first
#define y second
#define mem(a,b) memset(a,b,sizeof(a))
#define F(i,l,r) for(int i=l;i<=r;i++)
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;

const int N=2e5+1000;

int n,d[N],sum[N];
vector<int> g[N];

void dfs(int u,int fa,int dst)
{
    if(dst<0)
        return;
    sum[u]++;
    for(int v:g[u])
    {
        if(v!=fa)
            dfs(v,u,dst-1);
    }

}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>d[i];
    for(int i=1;i<n;i++)
    {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    for(int i=1;i<=n;i++)
        dfs(i,0,d[i]);
    for(int i=1;i<=n;i++)
        cout<<sum[i]<<" ";
    return 0;
}

#我的实习求职记录##我的实习日记#
全部评论
大佬 其他OJ上有没有类似第四题的题啊
2 回复 分享
发布于 2023-03-18 12:36 日本
想请问大佬一个问题,在笔试的时候你的头文件和定义是提前写好的吗,笔试可以直接使用吗,会不会被判作弊呀
1 回复 分享
发布于 2023-03-18 17:13 香港
佬~
1 回复 分享
发布于 2023-03-18 16:01 吉林
大佬,可以写个Java版本吗?想学习一下
1 回复 分享
发布于 2023-03-18 13:38 上海
大佬能讲一下第一题二维前缀和的思路吗?小菜鸡看不懂
1 回复 分享
发布于 2023-03-18 13:23 北京
tql
点赞 回复 分享
发布于 2023-03-21 09:40 江苏
请教一下第四题的思路。。
点赞 回复 分享
发布于 2023-03-19 16:39 江苏
佬请问第四题是否真的有必要开两个数组呢,一个三维数组能做嘛
点赞 回复 分享
发布于 2023-03-18 17:04 上海
留下了不争气的泪水
点赞 回复 分享
发布于 2023-03-18 16:47 广东
大佬,这么短时间都A也太强了
点赞 回复 分享
发布于 2023-03-18 15:23 香港
关注一手大佬
点赞 回复 分享
发布于 2023-03-18 13:45 广东
求教:第四题最大化数量,贪心不可以吗
点赞 回复 分享
发布于 2023-03-18 13:11 湖北
tql
点赞 回复 分享
发布于 2023-03-18 12:51 北京
太强了
点赞 回复 分享
发布于 2023-03-18 12:47 北京
佬tql
点赞 回复 分享
发布于 2023-03-18 12:44 湖南
太强了
点赞 回复 分享
发布于 2023-03-18 12:43 江苏
点赞 回复 分享
发布于 2023-03-18 12:34 上海
大佬
点赞 回复 分享
发布于 2023-03-18 12:26 江西
点赞 回复 分享
发布于 2023-03-18 12:21 浙江

相关推荐

不愿透露姓名的神秘牛友
2025-12-17 16:48
今天九点半到公司,我跟往常一样先扫了眼电脑,屁活儿没有。寻思着没事干,就去蹲了个厕所,回来摸出手机刷了会儿。结果老板刚好路过,拍了我一下说上班别玩手机,我吓得赶紧揣兜里。也就过了四十分钟吧,我的直属领导把我叫到小隔间,上来就给我一句:“你玩手机这事儿把老板惹毛了,说白了,你可以重新找工作了,等下&nbsp;HR&nbsp;会来跟你谈。”&nbsp;我当时脑子直接宕机,一句话都没憋出来。后面&nbsp;HR&nbsp;找我谈话,直属领导也在旁边。HR&nbsp;说我这毛病不是一次两次了,属于屡教不改,不光上班玩手机,还用公司电脑看论文、弄学校的事儿。我当时人都傻了,上班摸鱼是不对,可我都是闲得发慌的时候才摸啊!而且玩手机这事儿,从来没人跟我说过后果这么严重,更没人告诉我在公司学个习也算犯错!连一次口头提醒都没有,哪儿来的屡教不改啊?更让我膈应的是,昨天部门刚开了会,说四个实习生里留一个转正,让大家好好表现。结果今天我就因为玩手机被开了。但搞笑的是,开会前直属领导就把我叫去小会议室,明明白白告诉我:“转正这事儿你就别想了,你的学历达不到我们部门要求,当初招你进来也没打算给你这个机会。”合着我没入贵厂的眼是吧?可我都已经被排除在转正名单外了,摸个鱼至于直接把我开了吗?真的太离谱了!
rush$0522:转正名单没进,大概率本来就没打算留你
摸鱼被leader发现了...
点赞 评论 收藏
分享
最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
46
85
分享

创作者周榜

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