网易互娱 08.27 笔试 100+90+100

网易互娱第三题刚好熟悉相关方法,侥幸过了。

第1题 模拟题 (AC)

    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for(int p = 0; p < n; p++) {
            int len = in.nextInt();
            int size = in.nextInt();
            char[][] pic = new char[len][len];
            for(int i = 0; i < len; i++){
                String str = in.next();
                pic[i] = str.toCharArray();
            }
            int left = (size - len)/2;
            int leftCnt = left / len;
            int leftOffset = left % len;
            int cnt = leftCnt*2+1;
            for(int i = 0; i < leftOffset; i++){ // offset 行
                printLine(pic, leftOffset, len-leftOffset+i, cnt);
            }
            for(int i = 0; i < cnt * len; i++) {
                printLine(pic, leftOffset, i%len, cnt);
            }
            for(int i = 0; i < leftOffset; i++) {
                printLine(pic, leftOffset, i, cnt);
            }
        }
    }

    public static void printLine(char pic[][], int offset, int idx, int cnt){
        for(int i = 0; i < offset; i++){
            System.out.print(pic[idx][pic.length-offset+i]);
        }
        for(int i = 0; i < cnt; i++){ // cnt 个重复的
            for(int j = 0; j < pic.length; j++){
                System.out.print(pic[idx][j]);
            }
        }
        for(int i = 0; i < offset; i++){
            System.out.print(pic[idx][i]);
        }
        System.out.println();
    }

第2题 有效长方形面积 (90% 超时)

N个长方形,可能互相覆盖。若两个长方形存在覆盖面积(area>0),则两个长方形为有效长方形。计算有效长方形的覆盖面积。(0 <= x,y <= 1000)

求满分过程(划掉,原来最多只有一个重叠,在计算是否重叠时就直接处理好了,哭了)

    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for(int p = 0; p < t; p++) {
            int n = in.nextInt();
            boolean ok[] = new boolean[n];
            int arr[][] = new int[n][4];
            for(int i = 0; i < n; i++){
                arr[i][0] = in.nextInt();
                arr[i][2] = in.nextInt();
                arr[i][1] = in.nextInt();
                arr[i][3] = in.nextInt();
                for(int j = 0; j < i; j++) {
                    if(check(arr[i], arr[j]) || check(arr[j], arr[i])) {
                        ok[j] = true;
                        ok[i] = true;
                    }
                }
            }
            boolean vis[][] = new boolean[1000][1000];
            for(int i = 0; i < n; i++){
                if(!ok[i]) continue;
                for(int x = arr[i][0]; x < arr[i][1]; x++) {
                    for(int y = arr[i][2]; y < arr[i][3]; y++) {
                        vis[x][y] = true;
                    }
                }
            }
            int cnt = 0;
            for(int i = 0; i < 1000; i++) {
                for(int j = 0; j < 1000; j++) {
                    if(vis[i][j]) cnt++;
                }
            }
            System.out.println(cnt);
        }

    }

    public static boolean check(int a[], int b[]) {
        boolean bxl = a[0] <= b[0] && b[0] < a[1], bxr = a[0] < b[1] && b[1] <= a[1], bxin = b[0] <= a[0] && b[1] >= a[1], bxout = b[0] >= a[0] && b[1] <= a[1];
        boolean byl = a[2] <= b[2] && b[2] < a[3], byr = a[2] < b[2] && b[3] <= a[3], byin = b[2] <= a[2] && b[3] >= a[3], byout = b[2] >= a[2] && b[3] <= a[3];
        return (bxin || bxout || bxr || bxl) && (byin || byout || byl || byr);
    }

第3题 手机屏锁 (AC)

手机屏锁,9个点,问使用可用的点,能够展示的不同的图形有多少种。
'.' 代表可用,'X' 代表不可用。

输入:

3 // 3组数据
...  // 1组第一行
XXX  // 1组第二行
XXX  // 1组第三行
...  // 2组第一行
XXX  // 2组第二行
X.X  // 2组第三行
.X.  // 3组第一行
X.X  // 3组第二行
.X.  // 3组第三行

输出:

3
22
111

第1组,0-1,0-2 或者 0-1-2,1-2 共3种图形。

思路:9个点一共只有28条边,用int二进制就可以表示边的出现情况,即代码中的pic。edges就是边的情况。

获得为'.'的节点,进而获得全排列,根据全排列的情况计算图的样子。

public class Main{
    static int edges[][] = {
            {0,         1<<1,       (1<<2)+(1<<1),      1<<3,           1<<13,          1<<21,          (1<<3)+(1<<8),      1<<25,          (1<<13)+(1<<19)},
            {1<<1,      0,          1<<2,           1<<14,          1<<4,           1<<15,          1<<26,          (1<<4)+(1<<9),      1<<27},
            {(1<<2)+(1<<1), 1<<2,       0,              1<<22,          1<<16,          1<<5,           (1<<16)+(1<<18),    1<<28,          (1<<5)+(1<<10)},
            {1<<3,      1<<14,      1<<22,          0,              1<<6,           (1<<6)+(1<<7),      1<<8,           1<<17,          1<<23},
            {1<<13,     1<<4,       1<<16,          1<<6,           0,              1<<7,           1<<18,          1<<9,           1<<19},
            {1<<21,     1<<15,      1<<5,           (1<<6)+(1<<7),      1<<7,           0,              1<<24,          1<<20,          1<<10},
            {(1<<3)+(1<<8), 1<<26,      (1<<16)+(1<<18),    1<<8,           1<<18,          1<<24,          0,              1<<11,          (1<<12)+(1<<11)},
            {1<<25,     (1<<4)+(1<<9),  1<<28,          1<<17,          1<<9,           1<<20,          1<<11,          0,              1<<12},
            {(1<<13)+(1<<19), 1<<27,     (1<<5)+(1<<10),     1<<23,         1<<19,          1<<10,          (1<<12)+(1<<11),    1<<12,          0}};

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for(int p = 0; p < n; p++){
            // 生成数组
            int cnt = 0;
            int len = 0;
            ArrayList<Integer> l = new ArrayList<>(9);
            for(int i = 0; i < 3; i++) {
                String s = in.next();
                for(int j = 0; j < 3; j++){
                    if(s.charAt(j) == '.') {
                        l.add(len);
                        cnt++;
                    }
                    len++;
                }
            }
            // 全排列+统计图片
            ArrayList<ArrayList<Integer>> full = new ArrayList<>();
            Set<Integer> pic = new HashSet<>();
            fullDFS(pic, l, 0, full, cnt);
            System.out.println(pic.size());
        }
    }

    public static void fullDFS(Set<Integer> pic, ArrayList<Integer> l, int idx, ArrayList<ArrayList<Integer>> full, int len) {
        if(idx == len) {
            func(pic, l, 1, len, 0);
            return;
        }
        for(int i = idx; i < len; i++) {
            int tmp = l.get(i);
            l.set(i, l.get(idx));
            l.set(idx, tmp);
            fullDFS(pic, l, idx+1, full, len);
            l.set(idx, l.get(i));
            l.set(i, tmp);
        }
    }

    public static void func(Set<Integer> pic, ArrayList<Integer> l, int idx, int len, int value) {
        if(idx >= len) return;
        int edge = edges[l.get(idx-1)][l.get(idx)];
        value = value | edge;
        pic.add(value);
        func(pic, l, idx+1, len, value);
    }
}
#笔试##网易互娱##校招##JAVA##23届秋招笔面经#
全部评论
进面试了吗
点赞 回复 分享
发布于 2022-09-07 10:25 台湾
可以来我内推贴,我们还有hc
点赞 回复 分享
发布于 2022-08-27 23:31 北京
给大佬跪了
点赞 回复 分享
发布于 2022-08-27 22:06 浙江
佬牛逼
点赞 回复 分享
发布于 2022-08-27 22:04 浙江

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
3
13
分享

创作者周榜

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