网易雷火 笔试 AC数 + 题解


第一题(100%)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;

int getCommonCount(string& a, string& b){
    for(int len = 5; len > 0; len--){
        unordered_map<string, bool> vis;
        for(int i = 0; i <= a.size()-len; i++){
            vis[a.substr(i,len)] = true;
        }
        for(int i = 0; i <= b.size()-len; i++){
            if(vis[b.substr(i,len)]) return len;
        }
    }
    return 0;
}

double getScore(string& a, string& b){
    double score = 0;
    char colorA = a[0], colorB = b[0];
    string areaA = a.substr(1,a.size()-6), areaB = b.substr(1,b.size()-6);
    string numA = a.substr(a.size()-5,5), numB = b.substr(b.size()-5);
    if(colorA == colorB) score += 2;
    if(areaA == areaB) score += 3;
    score += getCommonCount(numA, numB);
    score *= 10;
    return score;
}
int main() {
#ifndef ONLINE_JUDGE
    freopen("in1.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0);

    int totalCount;
    double score = 0;
    string a, b;
    cin >> totalCount;
    for(int i = 0; i < totalCount; i++){
        cin >> a >> b;
//        double tmp = getScore(a, b);
//        cout << a << ' ' << b << ' ' << tmp << endl;
        score += getScore(a, b);
    }
    printf("%.2lf%\n",score/totalCount);
    return 0;
}
第二题(100%,一开始还以为是拓扑序)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 10;

vector<int> G[MAXN];
//int du[MAXN] = {0};
unordered_map<int, int> used;

int remove(int u){
    queue<int> que;
    unordered_set<int> vis;
    que.push(u);
    while(!que.empty()){
        u = que.front(); que.pop();
        if(vis.count(u) > 0) continue;
        vis.insert(u);
        used[u]--;
        if(used[u] == 0) used.erase(u);
        for(int v: G[u]){
            que.push(v);
        }
    }
    return used.size();
}
int apply(int u){
    queue<int> que;
    unordered_set<int> vis;
    que.push(u);
    while(!que.empty()){
        u = que.front(); que.pop();
        if(vis.count(u) > 0) continue;
        vis.insert(u);
        used[u]++;
        for(int v: G[u]){
            que.push(v);
        }
    }
    return used.size();
}
int main() {
#ifndef ONLINE_JUDGE
    freopen("in1.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0);
    int n, m;
    cin >> n >> m;
    for(int u = 0; u < n; u++){
        int count, v;
        cin >> count;
        while(count--){
            cin >> v;
            G[u].push_back(v);
        }
    }
    int flag, id, ans = 0;
    while(m--){
        cin >> flag >> id;
        if(flag) ans = max(ans,apply(id));
        else ans = max(ans, remove(id));
    }
    cout << ans << endl;
    return 0;
} 

第三题(100%, MAXN 500,结果暴力就直接过了,几何题没怎么刷过,扫描线也不会)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 10;
typedef pair<int,int> Point;
typedef pair<double,double> FloatPoint;
typedef pair<Point, Point> Line;
vector<Line> recs;

Point getPoint(Line& a, Line& b){
    Point &p1 = a.first, &p2 = a.second, &p3 = b.first, &p4 = b.second;
    if(p1.second >= p3.second && p1.second <= p4.second &&
    p3.first >= p1.first && p3.first <= p2.first){
        return Point(p3.first,p1.second);
    }
    return Point(-1,-1);
}
// 右上 左上 右下 左下
double dir[][2] = {0.5,0.5, -0.5,0.5, 0.5,-0.5, -0.5,-0.5};

bool PointinRec(double x, double y){
    for(Line& rec: recs){
        Point &a = rec.first, &b = rec.second;
        bool con1 = x > a.first && x < b.first;
        bool con2 = y > a.second && y < b.second;
        if(con1 && con2){
            return true;
        }
    }
    return false;
}

bool check(Point p){
    if(p.first < 0) return false;
    // 右上 左上 右下 左下
    bool ok1 = PointinRec(p.first + dir[0][0], p.second + dir[0][1]);
    bool ok2 = PointinRec(p.first + dir[1][0], p.second + dir[1][1]);
    bool ok3 = PointinRec(p.first + dir[2][0], p.second + dir[2][1]);
    bool ok4 = PointinRec(p.first + dir[3][0], p.second + dir[3][1]);
    int count = ok1 + ok2 + ok3 + ok4;
    if(count == 1 || count == 3) return true;
    if(count == 2 && (ok1 && ok4 || ok2 && ok3)){
        return true;
    }
    return false;
}


int main() {
#ifndef ONLINE_JUDGE
    freopen("in1.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0);
    int n;
    set<Point> points;
    set<Line> vecLine, colLine;
    cin >> n;
    for(int i = 0; i < n; i++){
        Point a, b, c, d;
        cin >> a.first >> a.second >> b.first >> b.second;
        c = Point(a.first,b.second);
        d = Point(b.first,a.second);

        recs.push_back(Line(a,b));
        vecLine.insert(Line(a,d));
        vecLine.insert(Line(c,b));
        colLine.insert(Line(a,c));
        colLine.insert(Line(d,b));
    }
    for(Line vec: vecLine){
        for(Line col: colLine){
            Point p = getPoint(vec,col);
            if(check(p))
                points.insert(p);
        }
    }
    for(Point p: points){
        cout << p.first << ' ' << p.second << endl;
    }
    return 0;
} 
第四题(过了1.6%,逃~~)
//#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;

int main() {
#ifndef ONLINE_JUDGE
    freopen("in1.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0);

    int blood, power;
    cin >> blood >> power;

    cout << 500 << endl;

    return 0;
}



#网易雷火笔试##网易雷火游戏笔试##网易雷火实习笔试##网易雷火##网易雷火23秋招笔试怎么这么难#
全部评论
看这个投票我就知道我已经寄了
7 回复 分享
发布于 2022-09-18 22:30 江苏
第四题假定全通关可过20%
3 回复 分享
发布于 2022-09-18 22:18 上海
逆天 我怎么就没想到写在TXT里就不会堆溢出了呢
2 回复 分享
发布于 2022-09-18 22:08 江苏
你第三题是全过嘛,我只过了91.67%,有没有人写第四题的
1 回复 分享
发布于 2022-09-18 22:09 江苏
第三题思路是什么啊
1 回复 分享
发布于 2022-09-18 22:13 湖南
第四题遍历打怪能过46%
1 回复 分享
发布于 2022-09-18 22:45 陕西
第三题啥思路
点赞 回复 分享
发布于 2022-09-18 22:15 江苏
这么多ak 的么
点赞 回复 分享
发布于 2022-09-19 00:20 江苏
我没看懂第三题的test阿,第二个test怎么算的
点赞 回复 分享
发布于 2022-09-19 19:04 浙江
这些都是什么题目,能不能说一下
点赞 回复 分享
发布于 2022-09-19 20:39 江西

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
14 48 评论
分享
牛客网
牛客企业服务