时间:2020年5月20日-2020年6月28日ios
地点:线上c++
这个活动当时是华工帮忙推广,因此华工的同窗推荐给我了,很是感谢那位同窗。面试
入营笔试有三道题,只作出了两道题,没有把题目记录下来有点惋惜。shell
最后一题是一个规划问题:数组
记忆中大概是,蛋糕店有任务要完成N个蛋糕,刚开始有m台生产机器和k个工人,天天能够生产的蛋糕为生产机器数*工人数。学习
天天生产的蛋糕能够保留也能够换取生产机器和人力,兑换规则为一个生产机器或者一个工人须要p个蛋糕。spa
问最短多少天能够完成生产任务?插件
输入:N m k pcode
输出:天数图片
我当时大概的思路是这个样子的,由(n-m)(n+m)<n*n能够获得,咱们要尽可能保证生产机器和工人数量尽量接近。
其次考虑成本的话,咱们要决定用不用蛋糕换取劳动力,而这里就是我没有想清楚的地方,最后只能不考虑成本混过一些样例。
由于实在忘了,也不知道题目是否是我记得的这样,就不补题了。
入营通知我其实一开始是没有收到的,是到时间点了我也没有收到refuse我才去翻了一下个人垃圾箱,结果然的是在垃圾箱里。我以前有一次腾讯笔试的通知也被当成骚扰短信拦截了。因此之后仍是要本身翻一下,智能拦截一点也不智能。(\~^~)/
Android插件化/热修复技术介绍
IOS逆向/破解方向技术介绍
都是介绍性的知识居多,因此训练营结束后还要下来好好学习。
此次训练营的过程当中主要看的就是《第一行代码》了。
项目大做业就是作一个类手机相册,能够浏览缩略图、查看大图、编辑图片、保存/删除图片、局域网传输图片。
我负责的是编辑图片这一块,就是旋转、裁剪、涂鸦。涂鸦这一块我只经过重写ImageView实现了绘制的基本功能,还不能擦除、不能改变画笔大小、颜色什么的。
定一个小目标就是我想要把这个功能继续完善了。
此次训练营过程当中,还share了一道字节的笔试题:
Q1—寻宝之旅
问题描述
小明得到了一张由n行m列矩阵构成的藏宝图,在这张网格地图上有一部分格子中标明了钻石的数量(1~9),其余格子均是障碍物不可到达。已知小明能够从任意一个含有宝藏的格子出发,每次沿着上下左右之一的方向走一格,但不能走到障碍格中,也不能重复通过一个宝藏格,而后把沿途通过的钻石都捡起来。他如今须要制定一条路线,使得根据这个路线前后顺序排列钻石数组成的数字最大。请帮忙找出这个最大的数字。
输入格式
- 第一行输入N和M, 分别表示藏宝图矩阵的行和列, 2<N,M<20
- 接下了N行,每行输入M个数字c,空格隔开, 0≤c<10
输出格式
返回整数m,表示最大数字
输入样例
5 6 0 0 0 0 0 0 0 7 8 9 4 0 0 2 3 7 0 0 0 4 5 0 0 0 0 0 0 0 3 2
- 输出样例
872453794
数据范围
- 2<N,M<20
一开始看到题脑子里就是并查集找最大集合而后BFS从最大数开始遍历,仔细一想,才发现大错特错,那就只能DFS+BFS+剪枝了。
#include <vector> #include <string> #include <iostream> using namespace std; #define N 23 #define M 23 int graph[N][M]; bool vis[N][M],visBfs[N][M]; int direct[4] = {1,0,-1,0}; string temp,ans; /*******************************图展现*******************************/ void showGraph(int n, int m, bool flag = true){ for(int i=0; i<=n+1; i++){ for(int j=0; j<=m+1; j++){ if(flag) cout<<graph[i][j]<<' '; else cout<<vis[i][j]<<' '; } cout<<endl; } } /*******************************图展现*******************************/ inline bool strCompare(string a,string b){ unsigned long lena = a.length(); unsigned long lenb = b.length(); return lena<lenb || (lena==lenb && a<b); } int getResBfs(int i, int j){ int len = 0; vector<int> q; q.push_back(i*25+j); while(!q.empty()){ int x = q.back(); int y = x % 25; x /= 25; q.pop_back(); for (int k=0; k<4; k++) { int n = x+direct[k]; int m = y+direct[(k+1)%4]; if(graph[n][m]!=0 && vis[n][m]==0 && visBfs[n][m]==0){ visBfs[n][m] = 1; q.push_back(n*25+m); len ++; } } } return len; } void dfs(int i, int j){ /*******************************未剪枝*******************************/ // cout<<temp<<' '<<ans<<endl; /* if(strCompare(ans, temp)) ans = temp; else {} for (int k=0; k<4; k++) { int n = i+direct[k]; int m = j+direct[(k+1)%4]; if(graph[n][m]!=0 && vis[n][m]==0){ vis[n][m] = 1; temp.push_back(graph[n][m]+'0'); dfs(n, m); temp.pop_back(); vis[n][m] = 0; } } */ /*******************************未剪枝*******************************/ /********************************剪枝********************************/ // cout<<temp<<' '<<ans<<endl; if(strCompare(ans, temp)) ans = temp; else { memset(visBfs, 0, sizeof(visBfs)); int resLen = getResBfs(i,j); if(resLen + temp.length() < ans.length()) return; } for (int k=0; k<4; k++) { int n = i+direct[k]; int m = j+direct[(k+1)%4]; if(graph[n][m]!=0 && vis[n][m]==0){ vis[n][m] = 1; temp.push_back(graph[n][m]+'0'); dfs(n, m); temp.pop_back(); vis[n][m] = 0; } } /********************************剪枝********************************/ } int main(){ int n,m; ios::sync_with_stdio(false); cin>>n>>m; memset(graph, 0, sizeof(graph)); ans = ""; temp = ""; for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ cin>>graph[i][j]; vis[i][j] = 0; } } // showGraph(n,m); for(int i=1; i<=n; i++){ for(int j=1; j<=m; j++){ if(graph[i][j]!=0){ vis[i][j] = 1; temp.push_back(graph[i][j]+'0'); dfs(i,j); temp.pop_back(); vis[i][j] = 0; } } } cout<<ans<<endl; return 0; }