【Online Challenge】GOCC09 Google's Online Challenge

60分钟两道题,第一道树相关占30分,第二道简单数论占20分。时间分配严重不合理,第二题不到十分钟就解决了,剩下的时间都在处理第一题的compile error……咕鸽online没有错误提示,感觉和面试时候白板手写代码差不多了TvT再次让我感到ide的伟大……

challenge帮你处理题目输入输出,和在leetcode做有点相似,你只要关心主逻辑就可以了。和leetcode不一样的地方是,会把输入输出的过程给你看,毕竟你得知道输入长什么样,特别是图,会有很多种表示方法。第一题我就在这里踩了坑,没注意到边的表示不是邻接矩阵,而是拿了个vector存两个顶点,还不告诉我谁是父结点谁是子结点(如果题目其实给的数据是按照父结点子结点的顺序的话,请忽略之,脑子确实有点懵),于是sigsev了……

第一题:给一棵树,要求找到距离最近且数值互质的祖先结点。

时间空间:(不记得了……)

测试组数T:(不记得了……)

结点个数N:1<=N<=105

每个结点的值Valuei:1<=Valuei<=100

太惨了,五个样例都只过了一个……直接输入输出是不是都能拿分啊我没试过,之前也没找到这个比赛的题目信息啊(已善用搜索)

结束了还懵圈了一个小时,然后我大概意识到自己的错误,seq小的不一定是seq大的结点的祖先结点啊!感觉算法这边得针对图相关的题目查漏补缺一下了。

第二题:给三个数,类型是long long,定义一次操作是将其中两个数同时减一,但不能将任何一个数减至负数。问最大操作数是多少。

例子是2 3 4,可行的操作是

第一种:2 3 4 → 1 2 4 → 0 1 4 → 0 0 3      三次操作

第二种:2 3 4 → 2 2 3 → 2 1 2 → 1 1 1 → 0 0 1  四次操作

显然就是四次操作是最大操作数了……

看到标题里有“最大”,我还以为会用dp……

思路很明确,直接上代码吧

long long maxOpNum(long a, long b, long c) {
    long long x, y, z;
    x = max(max(a, b), c);
    y = min(min(a, b), c);
    z = a + b + c - x - y;
    if (x >= y + z) {
        return y + z;
    }
    return (x + y + z) >> 1;
}

总体来说应该是不难的,但是因为各种原因,不熟练、有知识漏洞、读题做题习惯,时间不够用。练习时间还是太少了……

Anyway,加油鸭ヾ(◍°∇°◍)ノ゙

原文地址:https://www.cnblogs.com/zhouys96/p/13414700.html