作业帮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;
}
#作业帮笔试#
全部评论

相关推荐

昨天 23:39
中南大学 Java
本菜鸡什么时候才能找到大厂暑期实习呀😭======2.25一面======两道算法题:leetcode.343整数拆分、79.单词搜索八股1.谈谈你对Java反射的理解。2.动态代理是什么意思呢?3.业务当中如何考虑线程池4.线程池的工作原理5.什么场景会出现死锁?6.什么方案防止、优化死锁?7.SpringBoot接口没测试,调用接口失败了,HTTP响应码是多少?8.如何去处理项目中异常的呢?9.Try&nbsp;catch块catch了三种异常,但是第二个异常已经catch到了,那还会调用第三个异常吗?10.Spring&nbsp;Boot中AOP,你会在什么场景去使用切面呢?11.Spring&nbsp;Boot项目中如何引用一个自动注入的类?12.Resource、AutoWire你习惯用哪个?13.微服务14.XML中MyBatis&nbsp;Plus中可以使用吗?15.实体字段和表中字段不匹配,有什么办法关联?16.如何实现分页?17.缓存用过哪些?18.常见Redis数据类型19.Redis实现队列的方案?20.一般用过哪些消息队列?21.主流的RabbitMQ、RocketMQ、Kafhka,如何进行技术选型的?======3.6二面======1.技术方面的自我介绍2.哪一个比较有挑战?3.这个项目属于什么项目?4.自己动手写的主要模块包括哪些?5.省略一些项目相关的问题…6.做一个简单的并发小题目(会用FutureTask7.对自己的技术做一个优势/劣势的描述?如何总结?======3.17三面======一些普通八股大数据下使用快排还是归并排序智力题:五个海盗分100金币======3.19四面(已挂😡)======1.个人基本情况了解(手头是否有其他offer...2.解释一下Spring当中IOC3.concurrentHashMap&nbsp;1.8如何保证线程安全4.了解I/O多路复用?Java当中NIO有用吗?5.对AI了解的程度,是否看了DeepSeek论文?(懵了6.有没有做过模型调优,如何对DeepSeek进一步去做强化学习、SFT7.做Fine-Tuning的常见方式&nbsp;Lora了解吗?8.强化学习中,GLPO策略和PPO策略有什么区别?9.Redission的动态限流,如何去做动态的算法?10.Websocket,如何保证底层连接的机制???11.布隆过滤器具体算法描述12.布隆过滤器是概率的,怎么样提高布隆过滤器的概率?13.智力题:3L和5L水桶&nbsp;装4L水14.打探其他公司面试进度(我都不知道要不要老实说 pov:四面感觉体验很差,面试官问的偏的离谱。此外面试官态度感觉有点敷衍,略微消极,能从摄像头中看得出来。我投的后端开发,AI底层没答上来。#暑期实习&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;#JAVA# #腾讯# #26届实习转正#
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务