1.世界杯开幕式会在球场C举行,球场C的球迷看台可以容纳M*N个球迷。在球场售票完成后,现官方想统计此次开幕式一共有多少个球队球迷群体,最大的球队球迷群体有多少人。

经调研发现,球迷群体在选座时有以下特性:

同球队的球迷群体会选择相邻座位,不同球队的球迷群体会选择不相邻的座位(注解:相邻包括前后相邻,左右相邻,斜对角相邻)

给定一个M*N的二维球场,0代表该位置没有坐人,1代表该位置已有选择,希望输出球队群体个数P,最大的球队群体人数Q

输入描述:

第一行,2个数字,M及N,使用英文逗号分隔

接下来M行,每行N的数字,使用英文逗号分隔

输出描述:

一行,2个数字,P及Q,使用英文逗号分隔

其中P表示球队群体个数,Q表示最大的球队群体人数

例:输入

10,10

0,0,0,0,0,0,0,0,0,0

0,0,0,1,1,0,1,0,0,0

0,1,0,0,0,0,0,1,0,1

1,0,0,0,0,0,0,0,1,1

0,0,0,1,1,1,0,0,0,1

0,0,0,0,0,0,1,0,1,1

0,1,1,0,0,0,0,0,0,0

0,0,0,1,0,1,0,0,0,0

0,0,1,0,0,1,0,0,0,0

0,1,0,0,0,0,0,0,0,0

输出:6,8

代码如下:


#include<iostream>
#include<vector>
#include<string>using namespace std;int getNum(vector<vector<int>>& people,int i,int j,vector<vector<int>>& reach)
{int m=people.size(),n=people[0].size();if(i>=m||j>=n||i<0||j<0){return  0;}else if(people[i][j]==1&&reach[i][j]==0){reach[i][j]=1;int n1=getNum(people,i-1,j,reach)+getNum(people,i+1,j,reach);int n2=getNum(people,i,j-1,reach)+getNum(people,i,j+1,reach);int n3=getNum(people,i-1,j-1,reach)+getNum(people,i-1,j+1,reach);int n4=getNum(people,i+1,j-1,reach)+getNum(people,i+1,j+1,reach);return n1+n2+n3+n4+1;}else {return 0;}}
void getdata(vector<vector<int>>& people,vector<int>& num,vector<vector<int>>& reach)
{int m=people.size(),n=people[0].size();for(int i=0;i<m;i++)for(int j=0;j<n;j++) {if(people[i][j]==1&&reach[i][j]==0){int n=getNum(people,i,j,reach);num.push_back(n);}}
}
int main()
{int m;int n;char c;cin>>m>>c>>n;vector<vector<int> > people;vector<int> vtemp(n,0);vector<vector<int>> reach(m,vtemp);for(int i=0;i<m;i++){vector<int> ptemp;int temp;char cc;for(int j=0;j<n-1;j++){cin>>temp;cin>>cc;ptemp.push_back(temp);}cin>>temp;ptemp.push_back(temp);people.push_back(ptemp);}vector<int>num;if(people.empty()){cout<<0<<','<<0<<endl;return 0;}getdata(people,num,reach);vector<int>::iterator max=max_element(nums.begin(),nums.end());cout<<num.size()<<","<<*max<<endl;return 0;
}

2.为了提高文章质量,每一篇文章(假设全部都是英文)都会有m民编辑进行审核,每个编辑独立工作,会把觉得有问题的句子通过下表记录下来,比如[1,10],1表示病句的第一个字符,10表示病句的最后一个字符。也就是从1到10着10个字符组成的句子,是有问题的。

现在需要把多名编辑有问题的句子合并起来,送个总编辑进行最终的审核。比如编辑A指出的病句是[1,10],[32,45];编辑B指出的病句是[5,16],[78,94]那么[1,10]和[5,16]是有交叉的,可以合并成[1,16][32,45][78,94]

输入描述:

编辑数量m,之后每行是每个编辑的标记的下表组合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔

输出描述:

合并后的下标集合,第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔。返回结果是从小到大递增排列

例:输入

3

1,10;32,45

78,94;5,16

80,100;200,220;16,32

输出: 1,45;78,100;200,220

代码如下:

#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>using namespace std;void mergeIndex(vector<pair<int,int>>& vp)
{sort(vp.begin(),vp.end(),[](pair<int,int>& temp1,pair<int,int>& temp2){return temp1.first<temp2.first;});int n=vp.size();for(auto it=vp.begin();it<vp.end()-1;){if(it->second>=(it+1)->first-1){if((it+1)->second>it->second){it->second=(it+1)->second;}it=vp.erase(it+1);--it;}else{++it;}}
}
int main()
{vector<pair<int,int>> vp;int m;cin>>m;int first,last;char c1,c2;for(int i=0;i<m;i++){do{cin>>first;if(cin.get()==','){cin>>last;vp.push_back(make_pair(first,last));}}while(cin.get()==';');}mergeIndex(vp);int i=0;for(;i<vp.size()-1;i++){cout<<vp[i].first<<","<<vp[i].second<<";";}cout<<vp[i].first<<","<<vp[i].second<<endl;cout<<endl;return 0;
}

3. 小a和小b玩一个游戏,有n张卡牌,每张上面有两个正整数x,y。取一张牌时,个人积分增加x,团队积分增加y。求小a,小b各取若干张牌,使得他们的个人积分相等,且团队积分最大。

输入描述:

第一行n

接下来n行,每行两个正整数x,y

输出描述:

一行一个整数

表示小a的积分和小b的积分相等时,团队积分的最大值

例:输入

4

3 1

2 2

1 4

1 4

输出:10

说明:当a抽取(2,2),b抽取(1,4),(1,4)时,两人个人积分都是2,团队积分最大,为10分

代码如下:

#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;int main()
{int n;cin >> n;vector<pair<int, int>> vp;int a, b,cap=0;for(int i=0;i<n;i++){cin >> a >> b;vp.push_back(make_pair(a, b));cap = cap < a ? a : cap; }sort(vp.begin(), vp.end(), [](pair<int, int>& p1, pair<int, int>& p2) {return p1.second > p2.second; });int** dp = new int* [n];for (int i = 0; i<n; i++){dp[i] = new int[cap+1];}for (int j = 0; j <=cap; j++) {dp[n-1][j] = 0;}for (int i = n-2; i>=0; i--){for (int j = 0; j <= cap; j++){int point1 = (j >=vp[i].first) ? dp[i + 1][j- vp[i].first] + vp[i].second : 0;   //x[i]和cap-x[i]不能确定谁大int point2 = (j<=cap- vp[i].first) ? dp[i + 1][j+ vp[i].first] + vp[i].second : 0;//这样省去了划分区间的麻烦dp[i][j] = max({ dp[i + 1][j], point1, point2 });}}      cout << dp[0][0] << endl;for (int i = 0; i < n; i++) {delete [] dp[i];}delete [] dp;return 0;
}

4. 两个长度为n的序列a,b。问有多少个区间[l,r]满足max(a[l,r])<min(b[l,r])即a区间的最大值小于b区间的最小值数据范围:n<1e5,a(i),b(i)<1e9

输入描述:

第一行一个整数n

第二行n个数,第i个为a(i)

第三行n个数,第i个为b(i)

0<1<=r<n

输出描述:

一行一个整数,表示答案

例1:输入

3

3 2 1

3 3 3

输出: 3

5. 小明在抖音里关注了N个主播,每个主播每天的开播时间是固定的,分别在S时刻开始开播,t时间结束。小明无法同时观看两个主播的直播。一天被分成了M个时间单位。请问小明每天最多能完整观看多少场直播?

输入描述:

第一行一个整数,代表N

第二行一个整数,代表M

第三行空格间隔的N*2个整数,代表s,t

输出描述:

一行一个整数,表示答案

例1:输入

3

10

0 3 3 7 7 0

输出:3

例2: 输入

3

10

0 5 2 7 6 9

输出:2

备注:数据范围1<=N<=10^5

2<=M<=10^6

0<=s(i),t(i)<M (s(i)!=t(i))

s(i)>t(i)代表时间跨天,但直播时长不会超过一天

6

.

7

本题和寻找图中路径的思想一致。代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;bool rfind(int s, int des, int n, int& length, int* reach, int* path, vector<vector<int>>& red)
{reach[s] = 1;for (int u = 1; u <= n; u++){if (red[s][u] != 0 && reach[u] == 0) {path[++length] = u;if (u == des || rfind(u, des, n, length, reach, path, red)) {return true;}length--;}}return false;
}
int* findPath(int begin, int end, int n, vector<vector<int>>& red)
{int* path = new int[n + 1];path[1] = begin;int length = 1;int des = end;int* reach = new int[n + 1];for (int i = 1; i <= n; i++) {reach[i] = 0;}if (begin == end || rfind(begin, des, n, length, reach, path, red)) {path[0] = length - 1;}else {delete[] path;path = NULL;}delete[] reach;return path;
}
int main()
{int n, m;cin >> n;cin >> m;vector<int> vtemp(n + 1, 0);vector<vector<int>> red(n + 1, vtemp);int row, col;for (int i = 0; i<m; i++){cin >> row >> col;red[row][col] = 1;}bool isred = true;int t = 0;for (int i = 1; i <= n; i++){isred = true;for (int j = 1; j <= n; j++){int* path = findPath(j, i, n, red);if (path == NULL){isred = false;break;}else {delete[] path;}}if (isred) {++t;}}cout << t << endl;return 0;
}

字节跳动2019届校招笔试题相关推荐

  1. 招商银行信用卡2019届实习笔试题

    招商银行信用卡2019届实习笔试题 题目表述:如图 思路:有向图中找回环.(具体方法和原理可以参考相关博客)同时标记那些指向回环的顶点.全部的顶点去掉被标记的顶点,输出就是答案了.完全按照题目中的提示 ...

  2. 字节跳动-2020秋招-笔试题剖析【5道算法题】

    字节跳动-2020秋招-笔试题剖析[5道算法题],限时120分钟. 让我们一起来看看这些题吧! 题一:模型文件去重 [题目描述] 抖音上不同的用户类型我们有不同的用户模型文件. 我们有一个模型配置文件 ...

  3. 字节跳动2023届校招薪资盘点!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->2024届校招求职交流群 2023年AI算法岗求职群已成立! 本星球不仅面向2024届.2 ...

  4. 2019届华为笔试题(软件卷)

    华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...

  5. 2019 美团校招笔试题 外卖满减

    时间限制:1秒 空间限制:65536K 你打开了美了么外卖,选择了一家店,你手里有一张满X元减10元的券,店里总共有n种菜,第i种菜一份需要A_i元,因为你不想吃太多份同一种菜,所以每种菜你最多只能点 ...

  6. 字节跳动2020秋招笔试题

    常规解法,按部就班,只能过30%: #include <iostream> #include <vector> #include <algorithm> #incl ...

  7. 2019 小米校招笔试题 小米大礼包

    小米之家是成人糖果店.里面有很多便宜,好用,好玩的产品.中秋节快到了,小米之家想给米粉们准备一些固定金额大礼包.对于给定的一个金额,需要判断能不能用不同种产品(一种产品在礼包最多出现一次)组合出来这个 ...

  8. 2019 快手校招笔试题详解

    可以理解为把5本书插到14本书的中间,即加头尾的15个空格里,有多少种组合.因为不能相邻,所以是有C(15, 5) = 3003 种方法 实际做的时候可以先计算C(19,5),可以在A,B中选一个,大 ...

  9. 字节跳动第四批笔试题

    第一题: 输入说明: 第一行输入n代表队伍中的人数 第二行输入队伍中每个人的身高(用空格隔开) 比如输入: 5 2 3 1 5 4 6 5 4 1 6 8 2 输出说明: 如果现在所在位置之前没有比自 ...

最新文章

  1. Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
  2. oracle 分页写法
  3. 编译安装keepalived-1.2.2.tar.gz报错处理
  4. 使用分层实现业务处理(二)
  5. 数据结构32:树存储结构
  6. Android开发架构规范
  7. 增加 addDataScheme(file) 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略...
  8. 遍历二叉树的全部方法(递归+非递归)
  9. 你需要掌握的事件分发高阶知识
  10. 那年学过的Java笔记三核心类库二
  11. Git系列(七):使用Git管理二进制大对象
  12. bzoj 3674 可持久化并查集加强版——可持久化并查集
  13. 【线性模型引论】王松桂著 课后习题2.2参考答案
  14. B站安卓端缓存的视频blv批量转换成完整MP4
  15. ks检验正态分布结果_SPSS实现Shapiro-Wilk正态分布检验
  16. 行业点评:有赞996事件,要感恩程序员的加班
  17. c语言编程 求一个数根号3,如何用C语言求两个数的最大公约数的三种算法
  18. tradeblazer mysql_交易开拓者(TradeBlazer)上手指南
  19. 八个笑话,八个人生哲理
  20. Python写反斜杠\a

热门文章

  1. HyperLynx(四)差分传输线模型
  2. 虚幻动画 | 让角色动起来,实现一个简易的走、跑、跳状态机
  3. 大脑的四个黄金记忆时间段
  4. k-最近邻聚类k-Nearest Neighbor
  5. 怎样提取电影片段做gif?仅需三步在线截取gif动图
  6. 如何抓取BT天堂电影数据
  7. 《程序员的创世传说》第三节 魔王与2012
  8. android 状态栏wifi,【技术贴】教你修改状态栏里的wifi、信号、电量图标(转自论坛)...
  9. android 设置画布颜色,android – 如何设置笔触颜色以在画布上绘制矩形?
  10. 台式机安装Windows11正式版(跳过TPM)