20220305美团笔试

1

#include <iostream>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 200010;
bool num[N];

int main(){
    int n; scanf("%d", &n);

    for(int i=0; i<n; i++){
        int t; scanf("%d", &t);
        num[t] = true;
    }

    for(int i=1; i<N; i++){
        if(num[i] && num[i-1]) num[i] = false;
    }

    int cnt = 0;
    for(int i=0; i<N; i++){
        if(num[i]) cnt ++;
    }

    printf("%d", cnt);
}

#2
https://blog.csdn.net/winter2121/article/details/72848482

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
const int INT_INF=0x3f3f3f3f;
int n,m = 2;
ll a[N],multi_dp[2][N];  
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld",a+i);
    for(int i=0;i<=n;i++)
        multi_dp[0][i]=0,multi_dp[1][i]=0;   

    for(int i=1,k=1;i<=m;i++,k^=1)    
    {
        multi_dp[k][i-1]=-INT_INF;   
        ll maxpre=-INT_INF;    
        for(int j=i;j<=n-m+i;j++)
        {
            maxpre=max(maxpre,multi_dp[k^1][j-1]);     
            multi_dp[k][j]=max(multi_dp[k][j-1],maxpre)+a[j];
        }
    }
    ll ans=-INT_INF;
    for(int i=m;i<=n;i++)
        ans=max(ans,multi_dp[m&1][i]);
    printf("%lld\n",ans);
}

3

#include <iostream>
using namespace std;

const int N = 1005;

char ops[N];
int vals[N];
bool gps[3][N];
int n, k;

int help(int i)
{
    int m = 0;

    int l = 0, r = 0;
    while (l <= n && r <= n){
        if(!gps[i][r]) r++;
        else{
            m = max(m, r - l);
            l = r; r++;
        }
    }
    return m;
}


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

    for(int i=0; i<k; i++){
        cin >> ops[i];
    }

    for(int i=0; i<k; i++){
        cin >> vals[i];
    }

    gps[0][0] = gps[0][n] = true;
    gps[1][0] = gps[1][n] = true;
    gps[2][0] = gps[2][n] = true;

    int mx = n, my = n, mz = n;

    for(int i=0; i<k; i++){
        char c = ops[i];
        int v = vals[i];
        if(c == 'x') {gps[0][vals[i]] = true; mx = help(0); }
        if(c == 'y') {gps[1][vals[i]] = true; my = help(1); }
        if(c == 'z') {gps[2][vals[i]] = true; mz = help(2); }
        printf("%d\n", mx*my*mz);
    }


}

4

树状数组?线段树? 变形?

5

https://blog.csdn.net/benbendlianlian/article/details/108614510

/*
*

4 5
1234 3 0
1204 3 0
5678 0 1
5679 0 0
5670 0 0

1284
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ColaForced

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值