小红书笔试 小红书笔试题 0914

笔试时间:2024年09月14日 秋招

历史笔试传送门:2023秋招笔试合集

第一题

题目:小红的文章匹配

小红书的第 i 篇文章有一个点赞数 ai 。小红认为,如果两篇不同的文章满足:点赞数通过位异或运算恰好得到 k ,那么这两篇文章是相似文章,即ai xor aj=k 。现在小红收集到了 n 篇文章的点赞数,请帮助她计算出有多少对 (i,j) 是相似文章。

输入描述

第一行输入两个整数n,k代表文章总数与相似文章判断值。

第二行输入 n 个整数 a1,a2,...,an(0≤ai≤) 代表每篇文章的点赞数。

输出描述

在一行上输出一个整数,代表相似文章的对数。

样例输入

4 5

1 1 3 4

样例输出

2

提示:可以发现,1 xor 4 = 5 ,那么文章一和四、文章二和四为两对相似文章。

参考题解

a xor b = c,则a xor c =b,对每篇文章i,找多少其他文章=a[i] xor k即可。

C++:[此代码未进行大量数据的测试,仅供参考]

#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
map<int,int>c;
int a[200005];
long long ans=0;
int main()
{
    int n,k;
    cin>>n>>k;
    for (int i=1; i<=n; i++)
    {
        cin>>a[i];
        c[a[i]]++;
    }
    for (int i=1; i<=n; i++)
        if (c[a[i]^k])
            ans+=c[a[i]^k]-(a[i]==(a[i]^k));
    cout<<ans/2<<endl;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<Integer, Integer> c = new HashMap<>();
        long ans = 0;
        
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] a = new int[n + 1];
        
        for (int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
            c.put(a[i], c.getOrDefault(a[i], 0) + 1);
        }
        
        for (int i = 1; i <= n; i++) {
            int target = a[i] ^ k;
            if (c.containsKey(target)) {
                ans += c.get(target) - (a[i] == target ? 1 : 0);
            }
        }
        
        System.out.println(ans / 2);
        sc.close();
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

def main():
    c = {}
    ans = 0

    n, k = map(int, input().split())
    a = [0] * (n + 1)

    for i in range(1, n + 1):
        a[i] = int(input())
        if a[i] in c:
            c[a[i]] += 1
        else:
            c[a[i]] = 1

    for i in range(1, n + 1):
        target = a[i] ^ k
        if target in c:
            ans += c[target] - (1 if a[i] == target else 0)

    print(ans // 2)

if __name__ == "__main__":
    main()

第二题

题目:魔法阅读室

小红书总部有一间神秘的魔法阅读室,它四四方方的,三边长为 x,y 和 z :在三维空间内,我们可以假定它占据了 (0,0,0) 到 (x,y,z) 的空间。有魔法的地方在于,这里面是不存在重力的!这样一来,阅读桌就可以漂浮在任何位置。小红书的大家都非常的热爱阅读,特别是在魔法阅读室里!所以,为了搭配魔法阅读室,大家购买了一张魔法阅读桌:这个桌子的体积为 k ,边长可以为任何的正整数。你需要将魔法阅读桌放入魔法阅读室,使得阅读桌的各边平行于对应轴,并且每个角都位于整数坐标上。在所有可能的边长选取情况下,旋转桌子被视为一种方向,找到全部三种方向里摆放方式数量最多的那种情况的数量之和。例如下图中,在 312 的空间里有一张边长为 (2,1,1) 的阅读桌,左右方向有 4 种摆放方式,而竖直方向只有 3 种摆放方式,故我们选取左右方向计入答案。

输入描述

每个测试文件均包含多个测试点。

第一行输入一个整数 T(1≤T≤1000) 代表测试数据组数,每组测试数据描述如下:

第一行输入四个整数 x,y,z 和 k,分别代表魔法阅读室的三边长和魔法阅读桌的体积。

除此之外,保证所有的 x 之和,y 之和以及所有的 z 之和均不超过 1000 。

输出描述

对于每一个测试点,在一行上输出一个整数,代表不同的摆放方式数量。如果无法将魔法阅读桌放入阅读室,那么输出 0。

样例输入

2

3 1 2 2

1 2 3 7

样例输出

4

0

提示:

对于第一个测试点,已经在题目中加以解释。对于第二个测试点,无法将魔法桌放入阅读室。

参考题解

枚举边长i,j,t,保证i<j<t避免重复。不同方向就是把三条边顺序排列组合。边长(a,b,c)在(x,y,z)空间能放的方案数是(x-a+1) * (b-y+1) * (c-z+1)

C++:[此代码未进行大量数据的测试,仅供参考]

#include<cstdio>
#include<iostream>
using namespace std;
int x,y,z,k;
int w(int a,int b,int c)
{
    if (a>x || b>y || c>z) return 0;
    return (x-a+1)*(y-b+1)*(z-c+1);
}
int main()
{
    int T;
    cin>>T;
    while (T--)
    {
        cin>>x>>y>>z>>k;
        if (x>y) swap(x,y);
        if (y>z) swap(y,z);
        if (x>y) swap(x,y);
        long long ans=0;
        for (int i=1; i<=x; i++)
            for (int j=i; j<=y; j++)
            {
                int t=k/i/j;
                if (t<j) break;
                if (i*j*t!=k) continue;
                int s=max(w(t,i,j),w(t,j,i));
                int ss=max(w(i,t,j),w(j,t,i));
                int sss=max(w(i,j,t),w(j,i,t));
                ans+=max(s,max(ss,sss));
            }
        cout<<ans<<endl;
    }
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import jav

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

碧海蓝涛:我一开始也是,后来想到比如说长度是10,希望偏移是3,只给我1,9,4可用,用9和4拼起来的次数就是2,显然比用十个1小,然后我就想到应该可以把dp扩容成两倍长度,看看dp[i]和dp[i+n],结果一下子又通过了5%,然后我又扩容到10倍,20倍,30倍,40倍,到40倍就全部通过了,我做出来自己都没绷住
投递米哈游等公司10个岗位
点赞 评论 收藏
分享
1.我看你简历写了鸿蒙适配,这个是怎么回事。2.可以说一下你在美团的这个项目里面,你觉得是最有挑战的一件事儿是什么3.react-native编译原理4.你在美团的时候学的react-native吗?5.什么时候用原生,什么时候用rn6.rn的热更新的原理是怎么做的?开源社区一般是怎么做的?7.rn如何监听jsError?h5如何监听全局异常?8.react生命周期。9.什么时候用useEffect,举个例子。10.了解web安全吗?讲一讲(这个问死我了,xss和csrf问的好深)10.1说这个xss,我在微博,如何用xss来攻击我。10.2你写个脚本攻击我,除了alert,写个有攻击性的。10.3用xss窃取cookie不会有同源策略的影响吗。10.4说一说同源策略10.5你八股背的挺熟啊,回到刚刚,不会受到同源策略的影响吗?转义的话,箭头都要转义吗?除了script标签,其他的用不用转移?转移完在微博上显示,还要转义回来吗?在微博评论区,别人看到的是转义后的还是转义前的。10.6.怎么通过CSRF来攻击我?10.7.怎么防御CSRF?用验证码,用什么验证码?手机验证码是不是太大材小用了?为什么要用token?随机数可不可以作为token?在哪里携带token?我不用token,用post不行吗?点击链接都是get请求,那我都用post不就好了嘛,不就不会被攻击了吗?为什么?11.手撕,很简单,第一道是深拷贝,第二道是有代价的爬楼梯,秒了。补充:面试官很有耐心,很有水准,爆杀臭脸虾皮面试官。第二天约2面。一面把小红书笔试挤掉了,二面把饿了么笔试挤掉了,太抽象了。
查看36道真题和解析
点赞 评论 收藏
分享
评论
2
11
分享

创作者周榜

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