2022.3.2日网易互娱笔试题解

第一题

#include <bits/stdc++.h>
using namespace std;

int xs[] = {0, 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
string rs = "10X98765432";
char id[20];
vector<int> idx;
int ans;

int check() {
    int r = 0;
    for (int i = 1; i <= 17; i++)
        r = (r + (id[i] - '0') * xs[i]) % 11;
    return rs[r] == id[18];
}

void dfs(int x, int n) {
    if (x == n) {
        ans += check();
        return;
    }
    for (int i = 0; i <= 9; i++) {
        id[idx[x]] = i + '0';
        dfs(x + 1, n);
    }
}

int main() {
    int T; cin >> T;
    while (T--) {
        cin >> (id + 1); idx.clear();
        for (int i = 1; i <= 18; i++) // 找到 * 所在的位置集合 
            if (id[i] == '*')
                idx.push_back(i);
        ans = 0;
        dfs(0, idx.size());
        cout << ans << endl;
    }
}
	

第二题

#include <bits/stdc++.h>
using namespace std; 
#define fi first
#define se second
const int N = 1e5 + 5;

typedef long long LL;

vector<pair<int, int>> edge[N];

int n; LL t[N];

void init() {
    for (int i = 1; i <= n; i++) {
        t[i] = 0;
        edge[i].clear();
    }
}

void solve() {
    scanf("%d", &n); init();
    queue<int> que;
    for (int i = 1; i <= n; i++) {
        int D, K;
        scanf("%d %d", &D, &K);
        if (!K) // 将入度为 0 的点加入到队列中,并更新任务的完成时间 
            que.push(i), t[i] = D;
        while (K--) {
            int x; scanf("%d", &x);
            edge[x].push_back({i, D});
        }
    }
    while (!que.empty()) {
        int u = que.front(); que.pop();
        for (auto nxt : edge[u]) {
            int v = nxt.fi, w = nxt.se;
            t[v] = max(t[v], t[u] + w); // 更新 v 的最晚完成时间 
            if (-- rd[v] == 0) {
                que.push(v);
            }
        }
    }
    LL ans = 0;
    for (int i = 1; i <= n; i++)
        ans = max(ans, t[i]);
    cout << ans << endl;
}

int main() {
    int T; cin >> T; while (T--) solve();
}

第三题

#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
const int N = 10005;

int n, m, p;
int dis[N][2];
vector<int> eb[N], el[N];

void init() {
    for (int i = 1 ; i <= n ; i ++) {
        eb[i].clear(), el[i].clear();
    }
}

int BFS() {
    queue<pair<int, int>> que; que.push({1, 0});
    memset(dis, 0x3f, sizeof(dis));
    dis[1][0] = 0;
    while (!que.empty()) {
        auto u = que.front(); que.pop();
        for (int v : eb[u.fi]) {
            if (dis[v][0] > dis[u.fi][u.se] + 1) que.push({v, 0});
            dis[v][0] = dis[u.fi][u.se] + 1;
        }
        for (int v : el[u.fi]) {
            if (dis[v][1] > dis[u.fi][u.se] + u.se) que.push({v, 1});
            dis[v][1] = dis[u.fi][u.se] + u.se;
        }
    }
    return min(dis[n][0], dis[n][1]);
}

void solve() {
    scanf("%d %d %d", &n, &m, &p); init();
    for (int i = 0, u, v ; i < m ; i ++) {
        scanf("%d %d", &u, &v);
        eb[u].push_back(v), eb[v].push_back(u);
    }
    for (int i = 0, u, v ; i < p ; i ++) {
        scanf("%d %d", &u, &v);
        el[u].push_back(v), el[v].push_back(u);
    }
    cout << BFS() << endl;
}

int main() {
    int T; cin >> T; while (T --) solve();
    return 0;
}
#春招上岸经验##笔试题目##笔经##校招##网易#
全部评论
强啊
1 回复 分享
发布于 2022-03-02 23:02

相关推荐

小鹏、大疆、米哈游、MinMax小鹏上午投的下午就约面,进度未免也太快了
蛇年行大运fff:哥们 盗贴有意思吗,我发xhs上的给你搬过来了😅😅😅
点赞 评论 收藏
分享
评论
7
24
分享

创作者周榜

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