Eloquent JavaScript 08 Exercises
错误To the book page
Retry大概率触发MultiplicatorUnitFailure错误,承接直到运行成功并返回结果。
1234567891011121314151617181920212223242526272829class MultiplicatorUnitFailure extends Error {}function primitiveMultiply(a, b) { if (Math.random() < 0.2) { return a * b; } else { throw new MultiplicatorUnitFailure("Klunk"); }}function reliableMultiply(a, b) { // Your code here. for(;;){ try{ var ans = primitiveMultiply(a,b); break; ...
Eloquent JavaScript 07 robot
robotTo the book page代码解释由AI生成。
总代码数据结构和图的构建首先定义了村庄中各个地点之间的道路:
123456789const roads = [ "Alice's House-Bob's House", "Alice's House-Cabin", "Alice's House-Post Office", "Bob's House-Town Hall", "Daria's House-Ernie's House", "Daria's House-Town Hall", "Ernie's House-Grete's House", "Grete's House-Farm", "Grete's House-Shop", ...
Eloquent JavaScript 06 Exercises
对象To the book page
A vector type封装一个类,实现坐标的加减法,以及get属性的length返回坐标离原点的距离。
12345678910111213141516171819202122// Your code here.class Vec{ constructor(x,y){ this.x = x; this.y = y; } plus(other){ return new Vec(this.x+other.x,this.y+other.y); } minus(other){ return new Vec(this.x-other.x,this.y-other.y); } get length(){ return Math.sqrt(this.x**2+this.y**2); }}console.log(new Vec(1, 2).plus(n ...
Eloquent JavaScript 05 Exercises
高阶函数记录一下这本书的习题的答案,这是第五章的练习。
To the book page
Flattening将包含数组的数组展开,即只有一对中括号的数组。
1234567let arrays = [[1, 2, 3], [4, 5], [6]];// Your code here.let combineArrays = arrays.reduce((accumulator,currentArray)=>{ return accumulator.concat(currentArray);},[])console.log(combineArrays);// → [1, 2, 3, 4, 5, 6]
Your own loop如果不能满足条件(testAct)就不能继续循环。下一次循环要用新的值(updateAct),每次循环需要执行一定的操作(bodyAct)。
123456789101112// Your code here.function loop(value, testAct, updateAct,bodyAct){ if(!te ...
用Github Desktop简化你的推送流程
用Github Desktop简化你的推送流程Github Desktop官方网站
1. 第三方仓库克隆选择file->clone repository,
通过URL克隆你的仓库选择URL,里面填你的第三方仓库的https克隆链接,注意要填写公网地址而不是内网地址。
注意选择你保存仓库的本地位置
点击clone后应该会弹出让你输入用户名和密码,如果是gitlab,直接输入你登录gitlab的用户名和密码。
到此为止应该是可以克隆仓库到本地了。之后的操作,和一般的git操作是一致的,不过是有了图形化的界面,不用输入繁琐的命令。
2. add 和 commit直接到app界面,一旦仓库有文件更改,app界面会罗列出你更新文件的内容,需要你进行commit操作。
3. push处理完所有的commit后就可以进行推送了,直接点击界面右边的push origin 即可。
Chess For Three
Chess For Three这是Codeforces Round 945 (Div. 2) 第一题。
题目链接
题意三个人玩游戏,每局两个人玩。赢得人得2分,输的人得0分。平局每个人得1分。会给你三个人的最终得分,问最多平局多少局。
重点记录这里题确实不难,但是有一个样例因为没有给怎么算的导致我一直以为样例给错了。。。
123 4 56
3分4分5分,最大平局数是6。
我最一开始想的是a和b平局3次,b还剩一局和c平局,这是4次。a和c平局3次,b和c平局2次,这是5次。但是样例给的是6次。
6次的情况应该是c和a平局2次,c和b平局3次,a和b平局1次,这样就是6次。这真的是太amazing了。
题解可以直接暴力枚举a和b,a和c,b和c平局次数,然后判断分数是否合法。除去平局的分数,剩下的分数应该left%2==0。
但是还有结论, min((p1+p2+p3)/2,p1+p2),这里保证p1<=p2<=p3。
先考虑合不合法,三个数加一起如果是偶数就一定合法。
其次,如果p1+p2<=p3,那么情况应该是a和c平局p1次,b和c平局p ...
Prison Escape
Prison Escape这是codechef starter 134 div4的第六题。题目链接
题目大意NxM的01矩阵,0代表罪犯,1代表守卫者。罪犯可以上下左右移动,计算罪犯最少需要经过几个守卫者才能逃出这个矩阵。我们要求出这些罪犯里边经过最少守卫者数量的最大值。数据范围:T 1000,N和M 3e5,NxM<3e5。
赛时回顾一眼最短路,但是看见数据范围就没有去写代码。我觉得每个0点去执行最短路算法应该会超时。或者直接每个0进行bfs应该也会超时。
正解有个东西叫多源最短路。实际上我应该换位思考,不是去求0到边界的最短路,而是边界到0的最短路。多源最短路有两种方法,一是设置虚拟节点连接到所有源,二是直接把所有源节点压入队列中,不需要理会。
所以实际上这个题目是典型的0-1BFS问题。我们只需要将所有边界节点压入队列中,然后一点点向内更新距离即可。最后答案就是d[i][j]。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 ...
3 out 1 in
3out1in题目链接
题目大意这是codechef starter 134 div4的第五题。
给你一个数组B,里面包含M个数字,其中M必定为奇数。操作是选出三个数字a,b,c, 这三个数字从数组里剔除,数组中重新加入成员a+b-c。可以看出来每一次操作会让数组少两个元素,问最后剩下一个元素的最大值是多少。其中有多个询问,询问内容是如果只有前k个元素,剩下的最后一个元素最大值是多少。
赛时回顾我在第一次做这道题的时候就直接考虑到了用优先队列。显然最优解是每次选两个最大值,然后减去最小值。原数组我用数组a存储,每次将前k个元素送入优先队列和数组b中,数组b进行排序用来获得最小值,优先队列获取最大值。成功拿到30分的部分分,其他测试会超时。
正解官方题解思路让我恍然大悟。永远记得可以用空间换取时间。既然可以用一个优先队列,那么我们就可以用两个优先队列。虽然我们不知道给出的qurey里k的值是多少,但是我们可以用ans数组记录所有对应k值的答案。
首先就要考虑随着数组元素的增加,状态是如何转移的。我们可以将现有元素分成两组,一个是samll组,一个是large组。small组是 ...
Codeforces Round 944 (Div. 4) 回顾
Codeforces Round 944 (Div. 4) 回顾比赛回顾赛中是AC了前四题,E答案错误,F超时。可以说是做到了最后五分钟,排名是6000多。
比赛链接
官方题解链接
题目分析AB就直接跳过了,纯签到。
C. Clock and StringsC题意思是给出表中两对数字,看每对数字连接的线是否相交。我的思路是只要一条线的一个端点在另一条线的区间内,切另一端在区间外即可断定这两条线是相交的。
为了更好的进行区分,我进行了排序,其中满足a<c a<b c<d。
我觉得不能直接去写,表上的数字是1到12,对于一条线,一个端点是1,另一个端点是10,其中11和12其实是在线的包围内的,所以我给所有小于6的数字加了12,区间变成了6到17,然后判断是否c在a和b之间,d在a和b之外。但是我今天才发现我的判断语句竟然是这样的:
12if((a<c&&c<b)||(a<d&&d<b)) cout<<"YES"<<endl; else cout ...
安装完整版Xcode后我的C++万能库不见了
安装完整版Xcode后我的C++万能库不见了前言昨天因为安装了flutter的原因,因为这个需要完整版Xcode,之前都是安装的命令行版本的,所以直接去苹果应用商店安装了。但是万万没想到的是,完整版Xcode竟然更改了我使用的Clang地址。他更改到了Applications文件夹下的完整版Xcode里面。看来是Xcode自带了Clang然后就直接更改了默认地址。
好巧不巧昨天codeforces Round 944开赛前三分钟我才发现了问题。因为我的万能库引用不能用了。还好我有在博客写过mac电脑vscode的c++运行配置。所以只花了五分钟就添加好了万能库文件。不过我所经历的和上篇文章有所不同。所以在此记录一下。
在完整Xcode里添加万能库文件
同样是在终端里输入echo | g++ -v -x c++ -E -, 其中/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include是我们要修改的路径。
修改include文件 ...