腾讯2021校园招聘-后台&综合-第二次笔试 Apare_xzc

2020.9.6 20:00-22:00


5道编程题,500分


第一题:链表的公共部分

题意:

给定两个长度分别为n,m的链表,1<=n,m<=1000,000, 输出两个链表的公共部分

分析:双指针即可

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
int a[N],b[N];
int main(void) {int n,m;scanf("%d",&n);for(int i=0;i<n;++i)scanf("%d",a+i);scanf("%d",&m);for(int i=0;i<m;++i) scanf("%d",b+i);int i = 0, j = 0;while(i<n&&j<m) {if(a[i]==b[j]) printf("%d ",a[i]),++i,++j;else if(a[i]<b[j]) ++j;else ++i;}printf("\n");return 0;
}

100%


第二题:求消息最多有几个人知道

题意:

有n个人,有m个小组,每个小组有ki个人。一个人可以属于多个小组,也可以不属于任何一个小组。一个消息,初始0号知道,然后同一小组的人相互告知,求最后多少人知道?包括0。n<=1E5

分析:并查集即可。但是人的编号不一定是0~n-1

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int pre[N];
void init() {for(int i=0;i<N;++i) pre[i] = i;
}
int Find(int x) {return x==pre[x]?x:pre[x] = Find(pre[x]);
}
void join(int x,int y) {int fx = Find(x), fy = Find(y);if(fx!=fy) pre[fy] = fx;
}
int main(void) {int n,m,x,y;scanf("%d%d",&n,&m);init();set<int> st;for(int i=1;i<=m;++i) {scanf("%d",&x);vector<int> v;for(int j=0;j<x;++j)scanf("%d",&y),v.push_back(y),st.insert(y);for(int i=1;i<x;++i) join(v[i],v[i-1]);} int par = Find(0);int ans = 0;for(auto it:st) {if(Find(it)==par) ++ans;}printf("%d\n",ans);return 0;
}

100%


第三题:

题意:

给定n个字符串和一个K, 每个字符串记录出现的次数,输出前K个字符串和后K个字符串。输出2*K行, 前K行,按第一关键字为出现次数从大到小,第二关键字为字典序从小到大。后K行,按第一关键字为出现次数从小到大,第二关键字为字典序从小到大输出。

分析:自定义排序即可。

#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
map<string,int> mp;
struct Node{string str;int cnt;bool operator < (const Node& rhs)const{return cnt==rhs.cnt?str<rhs.str:cnt>rhs.cnt;}Node(string _str,int _cnt) {str = _str; cnt = _cnt;}
};
bool cmp(const Node& a,const Node& b) {return a.cnt==b.cnt?a.str<b.str:a.cnt<b.cnt;
}
int main(void) {int n,k;ios::sync_with_stdio(false); scanf("%d%d",&n,&k);string s;for(int i=1;i<=n;++i) {cin>>s;++mp[s];} vector<Node> v;for(auto it:mp) {v.push_back(Node(it.first,it.second));}sort(v.begin(),v.end());for(int i=0;i<k;++i) {cout<<v[i].str<<" "<<v[i].cnt<<"\n";}sort(v.begin(),v.end(),cmp);for(int i=0;i<k;++i) {cout<<v[i].str<<" "<<v[i].cnt<<"\n";}return 0;
}

100%


第四题

题意:

给一个序列,长度为n,n<=200,000。求删除每个数之后,序列的中位数。保证n为偶数。

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+100;
pair<int,int> a[N];
int ans[N];
int main(void) {int n;scanf("%d",&n);for(int i=0;i<n;++i) {a[i].second = i;scanf("%d",&a[i].first);}sort(a,a+n);int tot = n-1;int mid = tot/2;for(int i=0;i<n;++i) { //删除第i个数if(i<=mid) ans[a[i].second] = a[mid+1].first;else ans[a[i].second] = a[mid].first; }for(int i=0;i<n;++i)printf("%d\n",ans[i]);return 0;
}

100%


第五题:

题意:

有一个长度为2*n的格子,上面放了n个红棋子和n个黑棋子
n = 3
BRRBRB
先输入n,然后输入长度为2n的字符串
然后下面是2
n个数,第i个数,代表第i个位置的棋子在颜色相同的棋子中的序号

你每次操作可以 交换两个相邻的棋子。
现在要使得相同颜色的棋子,从左到右序号递增
问最少要多少次交换?

3
BRRBRB
2 3 1 1 2 3

分析:只过了5%,看样例是用选择排序的思想,先搞定一个颜色,再搞定另一个颜色,用选择排序的思想,每次先把当前最大的移动到合适的位置。但是移动R会对B的位置产生影响,猜想要先R后B,先B后R,每个从后往前排,从前往后排,然后4个结果取最小的。不知道这样贪心的正确性。只过了5%

#include <bits/stdc++.h>
using namespace std;
const int N = 3000+100;
/*
题目表述:有一个长度为2*n的格子,上面放了n个红棋子和n个黑棋子
n = 3
BRRBRB
先输入n,然后输入长度为2*n的字符串
然后下面是2*n个数,第i个数,代表第i个位置的棋子在颜色相同的棋子中的序号你每次操作可以 交换两个相邻的棋子。
现在要使得相同颜色的棋子,从左到右序号递增
问最少要多少次交换?*/
int a[N*2];
char s[N*2];
struct Node{int val; //值的大小    or  类型 'R' 'B' int pos; //原始位置        第几小  Node(int v=0,int p=0){val = v; pos = p;} bool operator < (Node& rhs)const{return val < rhs.val;}
};
int p[N*2];
Node r[N*2]; //记录棋盘的现状
int posR[N]; //记录R的第x小的位置
int posB[N]; //记录B的第x小的位置
int len;
void show() {static int cont = 0;printf("第%d次交换:\n",cont++);for(int j=1;j<=len;++j)cout<<(char)r[j].val;cout<<endl;for(int j=1;j<=len;++j) cout<<r[j].pos<<" ";cout<<endl<<endl;
}
int main(void) {int n;
//  freopen("in.txt","r",stdin);scanf("%d",&n);scanf("%s",s+1);len = 2*n;for(int i=1;i<=len;++i) scanf("%d",p+i);for(int i=1;i<=len;++i) {if(s[i]=='R') {r[i].val = 'R'; //记录类型 r[i].pos = p[i]; //记录第几小posR[p[i]] = i; //记录B的第p[i]小在位置i} else { //s[i]=='B' r[i].val = 'B'; //记录类型r[i].pos = p[i];//记录第几小posB[p[i]] = i; //记录B的第p[i]小在位置i } }int ans = 0;for(int i=n;i>1;--i) { //先处理R int rightest_pos = -1;for(int j=0;j<i;++j) {if(posR[j]>posR[i]) {rightest_pos = max(rightest_pos,posR[j]);}}if(rightest_pos==-1) continue;ans += rightest_pos-posR[i]; Node Ri_tmp = r[posR[i]]; //记录的是R的第i大的类型和第几大 for(int j=posR[i];j<rightest_pos;++j) {r[rightest_pos] = Ri_tmp;posR[Ri_tmp.pos] = rightest_pos; } //再处理Bfor(int i=n;i>1 ;--i) {  int rightest_pos = -1;for(int j=0;j<i;++j) {if(posB[j]>posB[i]) {rightest_pos = max(rightest_pos,posB[j]);}}if(rightest_pos==-1) continue;ans += rightest_pos-posB[i]; Node Ri_tmp = r[posB[i]]; for(int j=posB[i];j<rightest_pos;++j) {r[j] = r[j+1];if(r[j].val=='R') posR[r[j].pos] = j; //更新位置 else posB[r[j].pos] = j;}r[rightest_pos] = Ri_tmp;posB[Ri_tmp.pos] = rightest_pos; }  cout<<ans<<endl;return 0;
}

2020.9.7
6:56


腾讯2021校园招聘-后台综合-第二次笔试 Apare_xzc相关推荐

  1. 压缩算法 【腾讯2020校园招聘-后台综合-第一次笔试 】

    题目:小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且 ...

  2. 腾讯2020校园招聘后台开发面试编程题

    腾讯一面的时候,面试官给出了一道题,题目如下,当初由于是第一次面试,比较紧张没做出来,现在回顾总结一下. 题目 小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行 ...

  3. 腾讯2020校园招聘-后台 编程题

    小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且1&l ...

  4. 腾讯2021校园招聘技术类编程题汇总

    第一题 代码: '''author: 'Qingmang'data: "2022/9/8 16:26"email: "1107438760@qq.com" '' ...

  5. 腾讯2017年校园招聘笔试题第二题

    下面是腾讯2017年校园招聘笔试题第二题,在这里跟大家一起分享: 1. 题目 2. 我的思路 这题我觉得题目说的很清楚了.用类似于二分查找的方法,记录最大值.最小值和中间值,判断并记录在左区间(值为0 ...

  6. 2014校园招聘_腾讯2014校园招聘

    目录: 1.腾讯201 4 校园招聘简介 2.讯招聘常见问题解答 3.腾讯职业发展&薪酬待遇 4.腾讯校园招聘笔试经验 4.1 腾讯用户研究/ 交互设计笔试题目回忆版(杭州)-2012.10. ...

  7. 腾讯2020校园招聘----覆盖

    腾讯2020校园招聘----覆盖 文章目录 腾讯2020校园招聘----覆盖 一.题目描述 二.问题分析 三.代码 一.题目描述 小Q在进行一场竞技游戏,这场游戏的胜负关键就在于能够能争夺一条长度为L ...

  8. 腾讯2020校园招聘---假期

    腾讯2020校园招聘-假期 文章目录 腾讯2020校园招聘---假期 一.题目描述 二.题目分析 三.代码 一.题目描述 由于业绩优秀,公司给小Q放了 n 天的假,身为工作狂的小Q打算在在假期中工作. ...

  9. asic面试题目 英伟达_免笔试!不限量!全球可编程图形处理技术领袖英伟达2021校园招聘火热进行中!...

    关注并标星大同学吧 每周1次,打卡阅读 快速获取行业最新资讯 秋意浓,渐微凉 校招逐渐收尾 不少同学陆陆续续开始签约 还在观望决意不定的同学 英伟达还没结束! 筹谋已久的英伟达2021校园招聘 终于来 ...

最新文章

  1. 三维空间点进行空间平面拟合原理及MATLAB和C++代码实现
  2. JSP的执行过程(详解)
  3. python收集网页中的翻页
  4. 【转】如何用Redis做LRU-Cache
  5. Jquery Ajax 登录,服务端分别为 aspx,ashx,asmx
  6. ETL(数据仓库技术)
  7. 哪里找电商素材模板?
  8. Python 文件操作三
  9. 修改域的NetBIOS名称
  10. linux Audit 介绍【架构篇】
  11. 2022研究生电子设计竞赛总结(东北赛区一等奖、国家二等奖)
  12. 为什么csrss进程有三个_什么是客户端服务器运行时进程(csrss.exe),为什么在我的PC上运行它?...
  13. kafka及可视化工具offset explorer
  14. VMD常用命令(转载)
  15. 各种标点符号的英文怎么念
  16. the win16 subsystem was unable to enter protected mode,DOSX.EXE must be in your AUTOEXEC.NT and pres
  17. 建模 渲染 计算机配置,设计师专用电脑 8000元i5-7500独显专业渲染建模电脑配置推荐...
  18. AcWing 1113. 红与黑【《信息学奥赛一本通》】【DFS】【BFS】【Flood Fill】
  19. Fabric官方教程(release 2.2)翻译及总结——链码的生命周期管理
  20. 毕业论文管理系统用例图和活动图

热门文章

  1. mscbsc移动通信论坛_中国移动5G资费被确认,流量低至1毛/G, 联通电信又被动,网友:良心价...
  2. 射频收发信机架构和射频信号介绍
  3. 十五个闭目养神、调养身心的方法
  4. 【转】中国与华尔街不同的投行人生
  5. 如何快速做一个HTML5移动播放器
  6. 【CE】ASK,OOK,FSK,GFSK简介
  7. androbench测存储速率
  8. ANDROID内存优化(大汇总——全)
  9. 58同城2021校招笔试真题-前端
  10. Qt on Android 调用安卓原生方法