4.26华为笔试,两题都差4%,急死我了

1、spfa求最长路加判环 100%

#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;

struct edge
{
    int v,w;
};
int n,dst[N],vis[N],cnt[N];
vector<edge> g[N];

int spfa(int s)
{
    mem(dst,0);
    mem(vis,0);
    mem(cnt,0);

    queue<int> q;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();

        vis[u]=0;
        for(edge e:g[u])
        {
            int v=e.v,w=e.w;
            if(dst[v]<dst[u]+w)
            {
                dst[v]=dst[u]+w;
                cnt[v]=cnt[u]+1;
                if(cnt[v]>n+10)
                {
                    return -1;
                }
                if(!vis[v])
                {
                    q.push(v);
                    vis[v]=1;
                }
            }
        }
    }
    int res=0;
    for(int i=1;i<=n;i++)
        res=max(res,dst[i]);
    return res;
}

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

    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int k;
        cin>>k;
        while(k--)
        {
            int v;
            cin>>v;
            g[v].push_back({i,1});
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        int d=spfa(i);
        if(d==-1)
        {
            cout<<-1<<endl;
            return 0;
        }
        ans=max(ans,spfa(i));
    }
    cout<<ans+1<<endl;

    return 0;
}

2、96%,不知道哪里出bug了

#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);

    map<int,int> pos;
    deque<pii> q;

    int l,r;
    cin>>l>>r;
    int cnt=r-l+1;
    for(int i=l;i<=r;i++)
    {
        int now=q.size()+1;
        q.push_back({i,now});
        pos[i]=now;
    }
    int m;
    cin>>m;
    while(m--)
    {
        int opt,id;
        cin>>opt>>id;
        if(opt==1)
        {
            int p=0;
            while(true)
            {
                auto t=q.front();
                q.pop_front();
                if(t.y!=pos[t.x]||pos[t.x]==0)
                    continue;
                p++;
                if(p==id)
                    break;
            }
        }
        else if(opt==2)
        {
            pos[id]=0;
        }
        else
        {
            if(id<l||id>r||pos[id])
                continue;
            
            int now=++cnt;
            q.push_back({id,now});
            pos[id]=now;
        }
    }
    while(q.front().y!=pos[q.front().x]||pos[q.front().x]==0)
        q.pop_front();
    cout<<q.front().x<<endl;

    return 0;
}

3、二分+离散化+二维前缀和 96%

#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++)
#define int long long
using namespace std;

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

const int N=120;

int n,m;
pii pos[N];
int sum[N][N];

bool check(int x)
{
    //cout<<"-------"<<x<<endl;
    pii pos1[N],pos2[N];
    vector<int> nx,ny;
    for(int i=1;i<=n;i++)
    {
        pos1[i]={pos[i].x-x,pos[i].y-x};
        pos2[i]={pos[i].x+x,pos[i].y+x};
        nx.push_back(pos1[i].x);
        nx.push_back(pos2[i].x);
        ny.push_back(pos1[i].y);
        ny.push_back(pos2[i].y);
        //cout<<pos1[i].x<<" "<<pos1[i].y<<" "<<pos2[i].x<<" "<<pos2[i].y<<endl;
    }
    sort(nx.begin(),nx.end());
    sort(ny.begin(),ny.end());
    nx.erase(unique(nx.begin(),nx.end()),nx.end());
    ny.erase(unique(ny.begin(),ny.end()),ny.end());
    for(int i=1;i<=n;i++)
    {
        pos1[i].x=lower_bound(nx.begin(),nx.end(),pos1[i].x)-nx.begin()+1;
        pos2[i].x=lower_bound(nx.begin(),nx.end(),pos2[i].x)-nx.begin()+1;
        pos1[i].y=lower_bound(ny.begin(),ny.end(),pos1[i].y)-ny.begin()+1;
        pos2[i].y=lower_bound(ny.begin(),ny.end(),pos2[i].y)-ny.begin()+1;
    }
    mem(sum,0);
    for(int i=1;i<=n;i++)
    {
        sum[pos1[i].x][pos1[i].y]++;
        sum[pos2[i].x+1][pos2[i].y+1]++;
        sum[pos1[i].x][pos2[i].y+1]--;
        sum[pos2[i].x+1][pos1[i].y]--;
    }
    int mx=0;
    for(int i=1;i<=115;i++)
    {
        for(int j=1;j<=115;j++)
        {
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+sum[i][j];
            mx=max(mx,sum[i][j]);
        }
    }
    //cout<<"return:  "<<mx<<endl;
    return mx>=m;
}

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


    cin>>m>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>pos[i].x>>pos[i].y;
    }

    int l=0,r=1e16;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(check(mid))
            r=mid;
        else
            l=mid+1;
    }
    if(l==1e16)
        cout<<0<<endl;
    else
        cout<<l<<endl;

    return 0;
}

全部评论
太强了
1 回复 分享
发布于 2023-04-26 21:09 安徽
人与人的差距呀,往往比人比猪的都大,我真菜
点赞 回复 分享
发布于 2023-04-26 23:27 陕西
离散化是个什么算法,我可太菜了
点赞 回复 分享
发布于 2023-04-26 22:08 江苏
第三题离散化之后直接暴力就行,没必要用前缀和。
点赞 回复 分享
发布于 2023-04-26 21:35 北京
点赞 回复 分享
发布于 2023-04-26 21:32 北京
大佬太强了
点赞 回复 分享
发布于 2023-04-26 21:20 上海
跪了
点赞 回复 分享
发布于 2023-04-26 21:19 山东
点赞 回复 分享
发布于 2023-04-26 21:13 上海
想问问这种情况是给0分还是给96分呀我第一题95%
点赞 回复 分享
发布于 2023-04-26 21:12 广东
您太强了
点赞 回复 分享
发布于 2023-04-26 21:11 江苏
大佬好
点赞 回复 分享
发布于 2023-04-26 21:10 广东
大佬好
点赞 回复 分享
发布于 2023-04-26 21:07 北京

相关推荐

头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
09-22 15:45
门头沟学院 Java
谁给娃offer我给...:我也遇到了,我说只要我通过面试我就去,实际上我根本就不会去😁
点赞 评论 收藏
分享
评论
14
31
分享

创作者周榜

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