蚂蚁2022.9.15笔试题解

第一题挺简单的,略过。

第二题的话,建图跑一个dfs就好,对于每个点,如果其子节点的标记值大于它,则把差值累加到答案上,输出即可。(这里有个坑点,当出现任意一个父节点的标记值小于其子节点的标记值时,很明显是无法实现题目的情况的,也就是没有答案,这里应该输出-1,但是出题人没写,应该是题面漏放了)

第三题的话,由于我们只需要关心字母出现的奇偶性,那么我们可以对任意一个字符串,都用一个26位的数字来表示其26个字母的奇偶性状态。

我们先对整个字符串做个前缀和,那就得到了200001个状态,使用map记录每个状态出现了多少次,然后用auto for去遍历map里的每个状态,再for一遍26位字母,改变其奇偶性,也就是说把

M[now]*M[now^(1<<i)]  (i取0到25)累加到ans上,最后输出ans/2即可

补贴个第三题的代码:

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

ll ans = 0;
map<int,int>M;
char s[200007];

int main(){
    scanf("%s",s);
    int len = strlen(s);
    int now = 0;//初始状态为0,每个字母都出现了0(偶数)次
    M[0] = 1;
    for(int i = 0; i < len; i++){
        int temp = s[i] - 'a';
        now ^= (1 << temp);
        if(M.find(now) == M.end()) M[now] = 1;
        else M[now]++;
    }
    for(auto x:M){
        int now = x.first;
        for(int i = 0; i < 26; i++){
            ans += M[now] * (ll)M[now ^ (1 << i)];
        }
    }
    printf("%lld\n",ans/2);
}


#校招##蚂蚁##阿里巴巴##笔试##蚂蚁2023秋招笔试凉了啊#
全部评论
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-16 09:18 北京
mark
点赞 回复 分享
发布于 2022-09-15 21:28 广东
吐了。。。第二题为啥我通过0啊 大哥可以帮忙看看吗,万分感谢! ``` #include <bits/stdc++.h> using namespace std; unordered_set<int> st; int dfs(unordered_map<int, vector<int>>& mp, int idx, int offset) {     st.emplace(idx);          int newOff = idx - offset - 1;     int cnt = newOff;     for (int i : mp[idx]) {         if (st.count(i)) continue;         cnt += dfs(mp, i, newOff);     }     //cout << cnt << endl;     return cnt; } int main() {     int n;     cin >> n;          unordered_map<int, vector<int>> mp;     int u, v;     while (cin >> u >> v) {         mp[u].emplace_back(v);     }     int ans = 0; //     for (int i = 1; i <= n; ++i) { //         if (st.count(i) == 0) { //             ans += dfs(mp, i, 0); //         } //     }     cout << dfs(mp, 1, 0);     //cout << ans;          return 0; } ```
点赞 回复 分享
发布于 2022-09-15 20:52 北京
第二题我说我咋一直90%
点赞 回复 分享
发布于 2022-09-15 20:34 陕西

相关推荐

不愿透露姓名的神秘牛友
09-17 14:26
点赞 评论 收藏
分享
驼瑞驰_招募评论官版...:一共经历几次握手?
点赞 评论 收藏
分享
程序员牛肉:小牛肉来也! 基本破不了局了,我给你的建议是适当放弃秋招,投递大厂的日常实习之后赶明年的春招。 在没有实习的情况下,你的项目经历给面试官的作用就是提供提问点方便面试官来提问八股以及场景题而已。因此你现在简历的写法不太对,要着重突出项目中使用的技术点,而不是像你现在这个写的很宽泛。 最好是“基于xxxx技术解决了xxxx问题,解决了xxxx边缘场景问题”。最好是这样写,方便面试官对你的简历进行提问。 最后的最后,问题其实不在你。今年的秋招确实比较寒冬一点,所以找不到是正常的。要做好打持久战的准备。
Java学习交流
点赞 评论 收藏
分享
评论
5
4
分享

创作者周榜

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