声明:图片来自网络,笔者只是试着做了一下,然后做个记录。

拿到这个题目的时候,笔者首先想到的是二分。两个数组,一个是全体员工的集合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个员工中未打卡的那一个的更多相关文章

  1. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  2. 【Python】:用python做下百度2014笔试题

    国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度.题目是从[大卫David]那里copy过来的. 1.给定任意一个正 ...

  3. 2017头条笔试题:二维点集中找出右上角没有点的点并按x坐标从小到大打印坐标

    PS:这篇是之前本来就想发的但是一直没时间写,加上今天做了京东的题,结果代码名就命名为jingdong了……懒得改代码名重新跑一遍结果了=.= 暴力法去做就是遍历每个点,判断它是不是“最大点”.判断过 ...

  4. 【面试笔试算法】Problem 1 : DP滑雪问题--网易互联网算法实习生2017笔试题

    Description Michael喜欢滑雪百这并不奇怪,因为滑雪的确很刺激.可是 为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  5. 考研计算机复试(广东工业大学C语言复试2014~2017笔试题)(精华题选)

    1.C语言中,全局变量的存储类别是() A.extern B.void C.int   D.static 2.静态变量: (1)static 外部变量===>在函数外定义,只能在本文件中使用 ( ...

  6. 2016届百度实习生前端笔试题上海卷a

    1.写出javascript运行结果:alert(‘5’+5); 结果:alert()函数中不能进行算术运算或字符串拼接,故不会弹出对话框.   2.写出javascript运行结果:for(var ...

  7. 2015年百度实习生前端笔试题上海卷a

    1.写出javascript运行结果:alert(‘5’+5); 结果:’55’ 2.写出javascript运行结果:for(var i=0; i<10; i++){} alert(i); 结 ...

  8. [LeetCode每日一题]153.寻找旋转排序数组中的最小值

    [LeetCode每日一题]153.寻找旋转排序数组中的最小值 问题 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...

  9. 百度2016研发project师笔试题(四)

    百度2016研发project师笔试题(四) 2015/12/8 10:42(网上收集整理的,參考答案在后面.若有错误请大神指出) 1. 关于MapReduce的描写叙述错误的是() A. 一个Tas ...

随机推荐

  1. jquery validate.addMethod 正则表达式 (自定义验证方法)

    项目中使用的jQuery添加的校验的方法 $(document).ready(function(){         5           6/* 设置默认属性 */         7$.vali ...

  2. Win10下Genymotion无法正常使用的解决方法

    原Win7下安装配置的genymotion正常使用,Eclipse的Genymotion插件也可以正常运行.系统升级后,忽然就不work了. 折腾了一天试了各种方式,网上的例子也五花八门.最后还是找到 ...

  3. matlab GUI之常用对话框(一)-- uigetfile\ uiputfile \ uisetcolor \ uisetfont

    常用对话框(一) 1.uigetfile  文件打开对话框 调用格式:      [FileName,PathName,FilterIndex]=uigetfile or     [FileName, ...

  4. C++ template学习二 类模板定义及实例化

    一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员.默写成员函数的参数.某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的). 如果一个类中数据成员 ...

  5. php-Eclipse对php中的namespace关键字报语法错误的问题

    namespace是php5.3以上才支持的, 解决办法:升级IDE 切换Eclipse中的php版本 Window  > Preferences  > PHP  > PHP Int ...

  6. TJU 2944 Mussy Paper 最大权闭合子图

    传送门 给你一些东西,  每个东西有一个值,有正有负. 在给一些关系, 选了其中一个物品, 和他有关系的也必须全都选上, 关系是单向的. 问最后的最大价值是多少, 如果小于0输出“   **** ”( ...

  7. CSS 基础总结

    CSS基础 Doctype 声明位于文档中的最前面,处于 标签之前.告知浏览器的解析器,用什么文档类型 规范来解析这个文档. 在标准模式中,浏览器根据规范呈现页面: 在混杂模式中,页面以一种比较宽松的 ...

  8. Asp.Net Core WebApi学习笔记(四)-- Middleware

    Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...

  9. Apache服务无法启动的解决方法

    apache服务无法启动的解决方法 在配置apache的时候,把apache安装为服务myweb,用apacheMonitor启动myweb发现无法启动,提示:the requested operat ...

  10. DAL – RDBMS 的分区

    编辑人员注释:本文章由AzureCAT 云与企业工程组的高级项目经理Shaun Tinline-Jones 和Chris Clayton 共同撰写. "云服务基础"应用程序也称作& ...