作业帮25暑期实习笔试

一个字符串,一个思维,一个树状数组。

  1. 解析http的GET请求,输入一个http的url以及一个key,中间用空格隔开。输入key对应的value

Input:

https://www.baidu.com?id=123&age=18 id

Output:

123

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s, t;
    bool f = false;
    cin >> s >> t;
    unordered_map<string, string> mp;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '?') {
            f = true; continue;
        }
        if (!f) continue;
        int j = i;
        while (j < s.size() && s[j] != '=') j++;
        string key = s.substr(i, j - i);
        i = j;
        while (i < s.size() && s[i] != '&') i++;
        string val = s.substr(j + 1, i - j - 1);
        mp[key] = val;
    }
    cout << mp[t];
    return 0;
}
  1. 给一个数组,求数组中任意三个数乘积的最大值。 Input:
1,2,-5,-6,-2,4,3

Output:

120

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    vector<int> nums;
    nums.clear();
    int i = 0, base = 0, t = 1;
    while (i < s.size() && s[i] != ',') {
        if (s[i] == '-') t = -1;
        else base = base * 10 + s[i] - '0';
        ++i;
    }
    nums.push_back(base * t);
    for (; i < s.size(); ++i) {
        while (i < s.size() && s[i] != ',') {
            if (s[i] == '-') t = -1;
            else base = base * 10 + s[i] - '0';
            ++i;
        }
        nums.push_back(base * t);
        base = 0;
        t = 1;
    }
    sort(nums.begin(), nums.end());
    vector<int> ban;
    ban.clear();
    if (nums.size() <= 6) ban = nums;
    else {
        for (int i = 0; i < 3; ++i) ban.push_back(nums[i]);
        for (int i = nums.size() - 3; i < nums.size(); ++i) ban.push_back(nums[i]);
    }
    int ans = -0x3f3f3f3f;
    for (int i = 0; i < ban.size(); ++i) 
        for (int j = i + 1; j < ban.size(); ++j)
            for (int k = j + 1; k < ban.size(); ++k) {
                int x = ban[i], y = ban[j], z = ban[k];
                ans = max(ans, x * y * z);  
            }
    cout << ans;
    return 0;
}
  1. 给一个长度为n的整型数组a[i] (1 <= i <= n)表示颜色,由该数组拓展为一个无限长的彩带a,其中a[i]=a[i-n] (i>n)a[i]表示该彩带在位置i的颜色。
  • 现在给q个操作,每个操作由一个字符c以及一个整数x组成。其中字符c'L''R',如果c='L'那么表示从左向右剪该彩带,如果c='R'那么表示从右向左剪该彩带。x表示剪下的长度。
  • 求剪下的彩带里不同颜色的个数。
  • 输入第一行nq,第二行n个数表示a[i],接下来q行,每行一个cx
  • n, q <= 2e5

Input:

6 3
1 1 4 5 1 4
L 2
L 3
R 12

Output:

1
3
3

Hint:

初始彩带为:1 1 4 5 1 4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第一次从左往右剪长度为 2,剪下的彩带为:1 1,其中不同的颜色有1个。
这时彩带为:4 5 1 4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第二次从左往右剪长度为 3,剪下的彩带为:4 5 1,其中不同的颜色3个。
这时彩带为:4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第三次从右往左剪长度为 12,剪下的彩带为:1 1 4 5 1 4 1 1 4 5 1 4,其中不同的颜色有3个。
这时彩带为:4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4

Code:

#include <bits/stdc++.h>

using namespace std;

const int N = 4e5 + 10;

int n, q, a[N], mx;
int tr[N], ans[N];

struct node {
    int l, r, id;
    bool f;
    bool operator<(const node &t) const {
        return r < t.r; 
    }
}op[N];

int lt(int x) {
    return x & -x;
}

void add(int x, int v) {
    for (int i = x; i <= n; i += lt(i)) tr[i] += v; 
}

int query(int x) {
    int res = 0;
    for (int i = x; i; i -= lt(i)) res += tr[i];
    return res; 
}

int main() {
    scanf("%d%d", &n, &q);
    unordered_map<int, bool> st;
    for (int i = 1; i <= n; ++i) {
        scanf("%d", a + i);
        if (!st[a[i]]) {
            st[a[i]] = 1;
            ++mx;
        }
    }
    for (int i = n + 1; i <= 2 * n; ++i) a[i] = a[i - n];
    int L = 1, R = 2 * n;
    for (int i = 1; i <= q; ++i) {
        char c; int x, l, r;
        getchar();
        scanf("%c%d", &c, &x);
        op[i].id = i;
        if (x >= n) op[i].f = 1;
        else op[i].f = 0;
        x %= n;
        if (c == 'L') {
            l = L, r = L + x - 1;
            L = r + 1; if (L > n) L -= n;
        }
        else {
            l = R - x + 1, r = R;
            R = l - 1; if (R <= n) R += n;
        }
        op[i].l = l, op[i].r = r;
    }
    sort(op + 1, op + 1 + q);
    unordered_map<int, int> pre;
    int pos = 0;
    for (int i = 1; i <= q; ++i) {
        int l = op[i].l, r = op[i].r, id = op[i].id;
        if (op[i].f) ans[id] = mx;
        else {
            while (pos < r) {
                ++pos;
                if (pre[a[pos]]) add(pre[a[pos]], -1);
                add(pos, 1);
                pre[a[pos]] = pos;
            }
            ans[id] = query(r) - query(l - 1);
        }
    }
    for (int i = 1; i <= q; ++i) printf("%d\n", ans[i]);
    return 0;
}
#作业帮笔试#
全部评论
你这是臭带罢
2 回复 分享
发布于 03-21 19:52 湖北
第二题好臭
点赞 回复 分享
发布于 04-15 16:49 陕西
C题代码是正确的?
点赞 回复 分享
发布于 04-10 22:55 山东

相关推荐

04-07 20:59
门头沟学院 Java
点赞 评论 收藏
分享
游戏行业的高薪和'带薪打游戏',让大伙挤破了头,&nbsp;想进“鹅猪米”这类一线大厂。但现实是大厂校招堪比“游戏界高考”,没两把刷子简历都过不去。别光盯着大厂当“舔狗”游戏圈里还有很多宝藏公司,改好简历和作品集迅速上车吧!说不定你就是下一个爆款游戏的幕后大佬!一、用利他思维打造你的&quot;求职通关简历&quot;&nbsp;&nbsp;简历不是自嗨的成就清单,而是一份&quot;企业需求解决方案书&quot;。你需要站在HR和用人部门的角度思考:他们需要什么样的人才?你能为他们解决什么问题?&nbsp;&nbsp;一份高转化率的简历应该做到:&nbsp;&nbsp;✅&nbsp;价值可视化——不堆砌经历,而是展示你能为团队带来的实际贡献&nbsp;&nbsp;✅&nbsp;机会敲门砖——用精准匹配的证明,撬开面试室的大门&nbsp;&nbsp;记住:好简历不是说&quot;我有多优秀&quot;,而是告诉企业&quot;选我能解决你的痛点&quot;。也就是展示自我价值获取HR好感获得面试机会二、精准狙击岗位需求的简历秘诀①&nbsp;先做&quot;岗位解码器&quot;-&nbsp;像分析游戏任务说明一样拆解JD&nbsp;&nbsp;-&nbsp;标出关键词:必备技能、核心职责、隐性需求&nbsp;②&nbsp;启动人岗匹配系统-&nbsp;你的技能库&nbsp;→&nbsp;对接企业需求池&nbsp;&nbsp;-&nbsp;用项目经验证明:你正好能解决他们最头疼的问题&nbsp;&nbsp;(效果:把被动投递变成精准打击,用游戏化语言增强代入感)三、简历构成1、个人资料(姓名,联系方式,教育经历,照片,专业等)2、实习经历/项目简历(采用STAR法则能够让你的实习经历描述更加结构化和有说服力;①情景:实习公司,时间,部门②任务:实习期间主要任务③行动:如何解决问题,使用工具④结果:用数据成果说明价值)3、技能、证书、自我评价4、作品集(作品集和简历分开)作品集要重质量而非数量,3-4个完整项目>10个零散的作品。要保证项目的完整性,像不成体系的设计稿、没有明确目标的项目、过时的作品等可以酌情删除。四、网申过程中能写游戏经历的一定要写上去;比如&nbsp;:1、自己熟悉了解的游戏按照类别列举&nbsp;&nbsp;&nbsp;2、这款游戏有哪里做的比较吸引人&nbsp;&nbsp;3、有哪里不足可优化&nbsp;4、中间的玩法,关卡设置对比#我的求职精神状态##游戏求职进展汇总##我的上岸简历长这样##简历中的项目经历要怎么写##简历被挂麻了,求建议##最后再改一次简历#
点赞 评论 收藏
分享
评论
10
59
分享

创作者周榜

更多
牛客网
牛客企业服务