百度2017笔试题:寻找n个员工中未打卡的那一个
声明:图片来自网络,笔者只是试着做了一下,然后做个记录。

拿到这个题目的时候,笔者首先想到的是二分。两个数组,一个是全体员工的集合A;一个是缺少一人的集合B。对A,B排序,再对B进行二分,得到B的中间员工的工号mid,若A[mid] == B[mid],那么缺席员工的工号在mid之后,继续二分;若A[mid] < B[mid],那么缺席员工的工号在mid之前,继续二分。值得注意的是,这里A[mid]是不会大于B[mid]的。另外,这里的二分仅针对缺席工号在数组中间的情况。若缺席工号在数组(当然是排序后)首尾,单独处理即可。
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
#define MOD 1000000007ll
#define PI acos(-1.0)
const double EPS = 1e-;
//const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
//const LL MOD = 1e9+7; template <class T> inline T bigMod(T p, T e, T M){
long long ret = ;
for(; e > ; e >>= ){
if(e & ) ret = (ret * p) % M;
p = (p * p) % M;
} return (T)ret % M; // Attention: bigMod(p, 0, 1), so ret has to module M.
}
template <class T> inline T modInverse(T a, T M){return bigMod(a, M-, M);}
template <class T> inline T gcd(T a, T b){return b ? gcd(b, a%b) : a;}
int main() {
int T;
scanf("%d", &T);
for (int i = ; i <= T; ++i) {
vector<int> total;
vector<int> arrive;
int num; cin >> num;
for (int j = ; j < num; ++j) {
int employee; cin >> employee;
total.push_back(employee);
}
for (int j = ; j < num - ; ++j) {
int arriver; cin >> arriver;
arrive.push_back(arriver);
}
/*** binary search
sort(total.begin(), total.end());
sort(arrive.begin(), arrive.end());
if (total[0] != arrive[0]) cout << total[0] << endl;
else if (total[num-1] != arrive[num-2]) cout << total[num-1] << endl;
else {
int left = 0, right = num - 2;
while(left <= right) {
int mid = left + (right - left)/2;
if (total[mid] == arrive[mid]) {
left = mid + 1;
}else if (total[mid] < arrive[mid]){
right = mid - 1;
}
}
cout << total[left] << endl;
}*/
int num1 = ;
for (auto iter = total.begin(); iter != total.end(); ++iter) {
num1 = num1 ^ *iter;
}
int num2 = ;
for (auto iter = arrive.begin(); iter != arrive.end(); ++iter) {
num2 = num2 ^ *iter;
}
cout << (num1 ^ num2) << endl;
}
return ;
}
后来有个朋友提出了一个更好的方法,简直漂亮。利用异或的思想。
我们先来看这样一个表达式: p ^ q = m, m等于p,q的异或。那么有,p = q ^ m, q = p ^ m。
现在,回过头来看这个题目。我们把A中的元素互相异或得到m;把B中的元素互相异或得到p。那么,没来的哪个员工工号是q=m^p。
代码的实现也综合在上诉代码中。
百度2017笔试题:寻找n个员工中未打卡的那一个的更多相关文章
- [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】
/*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...
- 【Python】:用python做下百度2014笔试题
国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度.题目是从[大卫David]那里copy过来的. 1.给定任意一个正 ...
- 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标
PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...
- 【面试笔试算法】Problem 1 : DP滑雪问题--网易互联网算法实习生2017笔试题
Description Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激.可是 为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...
- 考研计算机复试(广东工业大学C语言复试2014~2017笔试题)(精华题选)
1.C语言中,全局变量的存储类别是() A.extern B.void C.int D.static 2.静态变量: (1)static 外部变量===>在函数外定义,只能在本文件中使用 ( ...
- 2016届百度实习生前端笔试题上海卷a
1.写出javascript运行结果:alert(‘5’+5); 结果:alert()函数中不能进行算术运算或字符串拼接,故不会弹出对话框. 2.写出javascript运行结果:for(var ...
- 2015年百度实习生前端笔试题上海卷a
1.写出javascript运行结果:alert(‘5’+5); 结果:’55’ 2.写出javascript运行结果:for(var i=0; i<10; i++){} alert(i); 结 ...
- [LeetCode每日一题]153.寻找旋转排序数组中的最小值
[LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...
- 百度2016研发project师笔试题(四)
百度2016研发project师笔试题(四) 2015/12/8 10:42(网上收集整理的,參考答案在后面.若有错误请大神指出) 1. 关于MapReduce的描写叙述错误的是() A. 一个Tas ...
随机推荐
- ObjectiveC中的block用法解析
Block Apple 在C, Objective-C,C++加上Block这个延申用法.目前只有Mac 10.6 和iOS 4有支持.Block是由一堆可执行的程序组成,也可以称做没有名字的Func ...
- POJ 2342 树形DP入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
- matlab GUI之自定义菜单小结
自定义菜单 1.uimenu对象 h=uimenu('PropertyName','ProperValue') h=uimenu(parent,'PropertyName','ProperValue' ...
- DataSet和DataTable详解
先构建一个结构与用户请求数据结构相同的DataTable,然后将用户的请求数据填充到构建好的DataTable中,最后将DataTable添加到DataSet中. DataTable,,DataCol ...
- java 调用jdbc 实现excel和csv的导入和导出
jdbc 的连接 实体类 package com.gpdi.mdata.web.manage.database.data;public class DBQueryData {private Strin ...
- 一个人的旅行(用小技巧转化为dijkstra算法)
注意: 1:因为两点之间可能有多条路,所以更新路径长度的时候做一次判断 if(time < mat[a][b]) mat[a][b] = mat[b][a] = time; 2:因为主函数中的数 ...
- BZOJ 1491: [NOI2007]社交网络( floyd )
floyd...求最短路时顺便求出路径数. 时间复杂度O(N^3) ------------------------------------------------------------------ ...
- 利用merge存储引擎来实现分表
我觉得这种方法比较适合,那些没有事先考虑,而已经出现了得,数据查询慢的情况.这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了,现在一张表要分成几十 ...
- 11-3URLTestDemo实例操作完成URL单元测试
11-3URLTestDemo 1.File -> New -> Project 在左边模板中选择Visual C#里的Web,对应到的项目类型选择ASP.NET MVC3 Web App ...
- android小知识之注释模板(转载)
设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...