网易游戏8月27日笔试

AC情况:2/3
第一题:
#include <iostream>
#include<vector>
using namespace std;
int main() {
    int T;
    while(cin >> T){// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
        int N, M;
        
//         vector<vector<int>> m(M, vector<int>(M));
        for(int t=0;t<T;t++){
            cin>>N>>M;
            vector<vector<char>> n(N, vector<char>(N));
            for(int i=0;i<N;i++){
                for(int j=0;j<N;j++){
                    cin>>n[i][j];
                }
            }
//             cout<<endl;
//             cout<<"qw";
            int start = 1;//start 代表的是最少需要start个基本模板才可以包括整个墙面
            while(start*N<M) start+=2;
            int changex =  (start*N - M)/2, changey =  (start*N - M)/2; //求的是“多余的边”的长度,就是start*N多出来的那部分
            int real_x , real_y; //real_x 代表的是现在的位置,投影到基础模板上的位置,real_y同理
            
            for(int row = 0;row < M;row++){
                for(int col = 0;col < M;col++){
                    real_x = (row + changex)%N;
                    real_y = (col + changex)%N;
                    cout<<n[real_x][real_y];
                }
                cout<<endl;
            }
            
            cout<<endl;
        }
    }
}
第二题:
#include <iostream>
#include<vector>
#include<unordered_map>
using namespace std;

int countArea(vector<int> &v1, vector<int> &v2){
    int maxx0 = max(v1[0], v2[0]);
    int minx1 = min(v1[2], v2[2]);
    int maxy0 = max(v1[1], v2[1]);
    int miny1 = min(v1[3], v2[3]);
    if(maxx0 >= minx1 || maxy0 >= miny1) return 0;
    int S1 = (v1[3]-v1[1])*(v1[2]-v1[0]), S2 = (v2[3]-v2[1])*(v2[2]-v2[0]);
    int S3 = (minx1 - maxx0)*(miny1 - maxy0);
    return S1+S2 - S3;
}

int main() {
    int T;
    while(cin >> T){// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
        int N;
        for(int t = 0;t<T;t++){
            cin>>N;
            vector<vector<int>> map(N, vector<int>(4));
            for(int i=0;i<N;i++){
                for(int j=0;j<4;j++){
                    cin>>map[i][j];
                }
            }
            unordered_map<int, int> cnt;
            int res = 0;
            for(int k=0;k<N;k++){
                for(int p=k+1;p<N;p++){
                    if(cnt.count(p) || cnt.count(k)) continue;
                    int area = countArea(map[k], map[p]);
                    if(area != 0){
                        cnt[p] = 0;
                        cnt[k] = 0;
                        res += area;
                    }
                }
            }
            cout<<res<<endl;
            
            
        }
    }
}
第三题没思路,就是手势解锁的可能次数那个,希望董的大佬说一下思路……


#网易互娱##网易笔试#
全部评论
int start = 1; while(start*N<M) start+=2; int changex =  (start*N - M)/2, changey =  (start*N - M)/2; 老哥我想问问这几步是在做什么变换?
点赞 回复 分享
发布于 2022-08-27 22:22 北京
手势解锁我用的状态压缩+dfs,但路径记录太复杂了,通过了用例但提交超时了
1 回复 分享
发布于 2022-08-27 22:39 浙江
同样A两道,第三题没时间,第三题我的思路还是遍历所有可能,记录状态,没想到啥好点子
点赞 回复 分享
发布于 2022-08-27 22:06 英国
第二题每个矩阵最多和一个矩阵相交吗...
点赞 回复 分享
发布于 2022-08-27 22:55 北京
第一题给分享个更简洁的做法
点赞 回复 分享
发布于 2022-08-28 11:06 山东

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
7
3
分享

创作者周榜

更多
牛客网
牛客企业服务