蚂蚁暑期实习笔试

一共三道题,一道字符串,一道二分+前缀和,一道组合计数。

  • 定义:
  • 圆圈字符: 26个小写字母中里面有圈的字母。(a, b, d, e, g, o, p, q
  • 一个字符串中圆圈字符的个数大于非圆圈字符的个数,那么该字符串为圆圈字符串
  • 问题:
  • 输入一个字符串,将字符串拆分为多个字串,求拆分后圆圈字符串最多有几个。

Input:

abc

Output:

2

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    int cnt = 0;
    string ot = "abdegopq";
    for (int i = 0; i < s.size(); i++) {
        if (ot.find(s[i]) != string::npos) cnt++;
    }
    cout << cnt << endl;
    return 0;
}
  • 问题:输入,给一个长度为的整数数组,以及个操作。
  • 操作1,输入一个1以及一个整数,对所有的进行赋值操作:
  • 操作2,输入一个2,输出数组中所有元素的和。
  • 输入包含组。

Input:

1
5 3
1 3 5 4 2
2
1 2
2

Output:

15
9

Code:

#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;

#define LL long long

int n, q, a[N];
LL s[N];

int main() {
    int T;
    scanf("%d", &T);
    while (T -- ) {
        scanf("%d%d", &n, &q);
        for (int i = 1; i <= n; i ++) {
            scanf("%d", &a[i]);
            s[i] = s[i - 1] + a[i];
        }
        sort(a + 1, a + n + 1);
        LL ans = s[n];
        int R = n;
        while (q --) {
            int op;
            scanf("%d", &op);
            if (op == 2) printf("%lld\n", ans); 
            else {
                int v;
                scanf("%d", &v);
                int l = 1, r = R, f = -1;
                while (l <= r) {
                    int mid = (l + r) >> 1;
                    if (a[mid] >= v) {
                        f = mid;
                        r = mid - 1;
                    }
                    else l = mid + 1;
                }
                if (f == -1) continue;
                else {
                    R = f;
                    a[f] = v;
                    ans = s[f - 1] + (LL) a[f] * (n - f + 1); 
                }
            }
        }
    }
    return 0;
}
  • 定义:一个整数,例如,那么对每一位进行排列组合可以得到,但这个数本身不应该被包含在内。因此最终的集合为
  • 问题:这个集合中,数位上所有数字的和为素数的元素个数。
  • 输入个整数,每个整数
  • 不考虑前导0

Input:

4
100
123
101
236

Output:

0
0
2
5

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int T;
    scanf("%d", &T);
    while (T -- ) {
        char x[12];
        scanf("%s", x + 1);
        int sum = 0, n = strlen(x + 1), cnt[12] = {0};
        for (int i = 1; i <= n; i ++ ) {
            int t = x[i] - '0';
            sum += t;
            cnt[t] ++;
        }
        bool f = true;
        for (int i = 2; i * i <= sum; ++ i) {
            if (sum % i == 0) {
                f = false; break;
            }
        }
        if (sum == 1) f = false;
        if (!f) {
            puts("0"); continue;
        }

        auto A = [&](int x) -> int {
            int res = 1;
            for (int i = 2; i <= x; ++i) res *= i;
            return res;
        };

        int ans = A(n);
        for (int i = 0; i <= 9; ++ i) {
            ans /= A(cnt[i]);
        }
        printf("%d\n", --ans);
    }
    return 0;
}
#蚂蚁实习笔试#
全部评论
你好,蚂蚁笔试是双机位吗,我是暑期实习
点赞 回复 分享
发布于 2025-03-26 09:56 湖北
哥们儿还记得单选的那道前缀树的题目吗?那个题是什么意思呀?
点赞 回复 分享
发布于 2025-03-20 23:27 湖北

相关推荐

03-04 10:24
门头沟学院 Java
说句实在的,小厂不是不能去,我自己也是从小厂实习一路摸爬滚打过来的,有一说一,小厂确实能让人成长飞快,但前提是&nbsp;——&nbsp;你得进对门、跟对人。我先给兄弟们说大实话:小厂好的地方,是没人跟你抢活、能直接碰核心、独立负责模块。我之前在小厂实习,刚去没多久就写接口、做功能、优化性能、跟着发版,什么脏活累活都干,虽然累得要死,但技术确实涨得快,简历也能写得满满当当。但!烂小厂,那真是纯纯渡劫。这几种小厂,千万别去!天天画饼,不谈实际一上来就跟你说&nbsp;“我们未来要上市”“跟着我干有前途”,结果一问薪资、双休、加班,全含糊其辞。这种就是纯坑,你干到死,也换不来一句实在话。没人带,还死命压任务项目结构不给你讲,业务逻辑不跟你说,上来就让你写代码、赶进度。你问一句,还嫌你烦。这种地方,你就是个廉价劳动力,学不到东西,还天天内耗。双休变单休,发版占周末最恶心的就是这种,说好双休,来了变成大小周,再干几天直接单休。发版永远安排在周日,唯一一天休息也给你占了。人不是机器,这么搞,身体先垮,心态先崩。管理混乱,朝令夕改今天让你做这个,明天让你改那个,需求一天三变,做完就推翻。纯纯浪费时间,你干得越多,错得越多。那什么样的小厂,可以去?有人带,愿意教你能接触核心业务,不是天天打杂作息稳定,不搞无意义内卷薪资说得明白,不玩套路简单说:能学技术、能攒经验、不坑人、不玩命的小厂,值得去;只会压榨、只会画饼、只会让你当牛马的小厂,有多远跑多远!大厂有大厂的体面,小厂有小厂的成长。关键不是大小,而是你能不能学到东西、能不能安稳生活
小厂一定不能去吗?
点赞 评论 收藏
分享
回家当保安:佬可以骑驴找马,现在开始投,实习空闲时间准备面试。拿了暑期offer 可以和HR或者面试官商量入职时间,可以大概5月份入职。
点赞 评论 收藏
分享
评论
7
5
分享

创作者周榜

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