• 头条笔试代码


    第一题:
    双指针:
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6+7;
    int a[N];
    int main()
    {
        int n,k;
        scanf("%d%d",&n,&k);
        for(int i=0;i<n;++i) scanf("%d",&a[i]);
        sort(a, a+n);
        n = unique(a, a+n) -a;
        int r = 0, ans=0;
        for(int l=0; l<n;++l)
        {
            while(r<n&&a[r]-a[l]<k) ++r;
            if(r==n) break;
            if(a[r]-a[l] == k) ++ans;
        }
        printf("%d
    ", ans);
        return 0;
    }
     
    第二题:
    BFS
     
    作者:vegetableB
    链接:https://www.nowcoder.com/discuss/70299
    来源:牛客网
    
    #include <bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> pii;
    map<pair<int,int> , int > mp;
    int main()
    {
        int n;
        scanf("%d",&n);
        queue<pii> q;
        q.push(make_pair(1, 1));
        mp[make_pair(1,1)]=0;
        while(!q.empty())
        {
            pii pr = q.front();q.pop();
    //        printf("%d %d
    ",pr.first, pr.second);
            if(pr.first == n)
            {
                printf("%d
    ", mp[pr]);
                exit(0);
            }
            pii t=pr;
            t.second = t.first; t.first*=2;
            if(!mp.count(t))
            {
                q.push(t);
                mp[t] = mp[pr]+1;
            }
            t=pr;
            t.first=t.first+t.second;
            if(!mp.count(t))
            {
                q.push(t);
                mp[t] = mp[pr]+1;
            }
        }
        return 0;
    }
     
    第三题:
    模拟。
    作者:vegetableB
    链接:https://www.nowcoder.com/discuss/70299
    来源:牛客网
    
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    char s[107];
    char G[5][10][8] = {
        {"66666", "....6", "66666", "66666", "6...6", "66666", "66666", "66666", "66666", "66666"},
        {"6...6", "....6", "....6", "....6", "6...6", "6....", "6....", "....6", "6...6", "6...6"},
        {"6...6", "....6", "66666", "66666", "66666", "66666", "66666", "....6", "66666", "66666"},
        {"6...6", "....6", "6....", "....6", "....6", "....6", "6...6", "....6", "6...6", "....6"},
        {"66666", "....6", "66666", "66666", "....6", "66666", "66666", "....6", "66666", "66666"}
    };
    ll cal()
    {
        int n = strlen(s);
        ll sum=0, cur=0, prd=1;
        for(int i=0; i<n; ++i)
        {
            if(isdigit(s[i])) cur=cur*10+s[i]-'0';
            else if(s[i] == '-')
            {
                sum+=prd*cur;
                cur=0;
                prd=-1;
            }
            else if(s[i] == '+')
            {
                sum+=prd*cur;
                cur=0;
                prd=1;
            }
            else
            {
                prd*=cur;
                cur=0;
            }
        }
        return sum+prd*cur;
    }
    int main()
    {
        int T;
        scanf("%d",&T);while(T--)
        {
            scanf("%s", s);
            ll ans = cal();
            for(int i=0; i<5; ++i)
            {
                vector<int> v;
                ll tmp = ans;
                while(tmp) v.push_back(tmp%10),tmp/=10;
                reverse(v.begin(), v.end());
                if(v.empty()) v.push_back(0);
                for(int j=0; j<v.size(); ++j)
                {
                    printf("%s%s",G[i][v[j]], j+1==v.size()?"
    ":"..");
                }
            }
        }
        return 0;
    }
    第四题:
    只能从均值大的集合往均值小的集合里放。
    取数只能取出现次数等于1的数
    放数只能放没出现过的数
    从小的数开始放可以使均值小的集合均值上升慢,均值大的集合均值上升快,这样最优。
     
    作者:vegetableB
    链接:https://www.nowcoder.com/discuss/70299
    来源:牛客网
    
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    set<int> sa,sb;
    ll suma, sumb;
    const long double eps = 1e-14;
    inline int cmp(long double a, long double b)
    {
        if(fabs(a-b) <= eps) return 0;
        return a>b?1:-1;
    }
    inline long double jz(ll k, int m)
    {
        return (long double)k/m;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=0; i<n;++i)
        {
            int t;
            scanf("%d",&t);
            sa.insert(t);
            suma+=t;
        }
        for(int i=0;i<m;++i)
        {
            int t;
            scanf("%d",&t);
            sb.insert(t);
            sumb+=t;
        }
        if(cmp(jz(suma, n), jz(sumb, m))==-1)
        {
            swap(suma, sumb);
            swap(n, m);
            sa.swap(sb);
        }
        int mx =n;
        int ans = 0;
        for(auto k : sa)
        {
            if(cmp(k, jz(suma, n)) >= 0) break;
    //        printf("%d %d
    ",n, k);
            if(!sb.count(k)&&cmp(k, jz(sumb, m))>0)
            {
                ++ans;
                sumb+=k;
                suma-=k;
                sb.insert(k);
                --n;++m;
            }
        }
        printf("%d
    ", ans);

    第五题:BFS

    作者:vegetableB
    链接:https://www.nowcoder.com/discuss/70299
    来源:牛客网
    
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5+1000;
    typedef pair<int, int> pii;
    bool vis[N];
    int a[N];
    int main()
    {
        int n,k,h;
        scanf("%d%d%d",&n,&k,&h);
        for(int i=0;i<n;++i)
        {
            int t;
            scanf("%d",&t);
            a[t]=1;
        }
        queue<pii> q;
        q.push({0,0});
        int ans = 0;
        while(!q.empty())
        {
            pii p = q.front(); q.pop();
            if(p.second>k) break;
            ans = max(ans, p.first);
            for(int i=1; i<=h; ++i)
            {
                if(a[p.first + i]&&!vis[p.first+2*i])
                {
                    vis[p.first+2*i]=true;
                    q.push(make_pair(p.first+2*i, p.second+1));
                }
                if(p.first-2*i>0&&a[p.first-i]&&!vis[p.first-2*i])
                {
                    vis[p.first-2*i]=true;
                    q.push(make_pair(p.first-2*i, p.second+1));
                }
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
     
     
     
     
     
     
  • 相关阅读:
    linux下ping命令出现ping: sendto: Network is unreachable
    tiny4412--linux驱动学习(2)
    tiny4412--linux驱动学习(1)
    linux-kernel-4.4 移植 (2)解决上部遗留DMA-PL330的问题
    linux-kernel-4.4 移植 (1)启动
    Busybox构建根文件系统和制作Ramdisk
    tiny4412 --Uboot移植(6) SD卡驱动,启动内核
    select响应事件
    项目总结1
    一个盒子只是显示两行
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8645114.html
Copyright © 2020-2023  润新知