zoukankan      html  css  js  c++  java
  • PayPal2019春招实习生笔试题的题目

    题目简单描述:给你n个点的坐标(x, y),均为浮点数。

    如果任意两个点之间的欧几里得距离小于给定的一个浮点值,则认为这两个点之间有关联,并且关联具有传递性,总之就是尽可能扩大一个集合。

    输入:

    d 欧式距离

    n 用户数

    接下来每个用户的坐标。

    2.0
    5
    3.0 5.0
    6.0 13.0
    2.0 6.0
    7.0 12.0
    0.0 2.0

    输出:

    [[0, 2], [1, 3], [4]]

    实现:并查集的应用

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <math.h>
    #include <set>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    struct node
    {
        double x, y;
    }cur;
    
    int fa[10000];
    
    double disE(node A, node B)
    {
        return ( fabs(A.x - B.x)*fabs(A.x - B.x) + fabs(A.y-B.y)*fabs(A.y-B.y) );
    }
    
    int findset(int x)
    {
        return fa[x]!=x ? fa[x] = findset(fa[x]) : x;
    }
    
    int main()
    {
        double dis;
        int n;
        scanf("%lf", &dis);
        scanf("%d", &n);
    
        vector<node>q;
        double a, b;
    
        for(int i=0; i<n; i++) {
            scanf("%lf %lf", &a, &b);
            cur.x = a;
            cur.y = b;
            q.push_back(cur);
        }
        for(int i=0; i<n; i++) {
            fa[i] = i;
        }
    
        dis = dis * dis;
        for(int i=0; i<q.size(); i++) {
            for(int j=0; j<q.size(); j++) {
                if(disE(q[i], q[j]) <= dis) {
                    // fa[findset(j)] = findset(i);
                    int xx = findset(i);
                    int yy = findset(j);
                    if(xx == yy)
                        continue;
                    else if(xx < yy)
                        fa[yy] = xx;
                    else if(xx > yy)
                        fa[xx] = yy;
                }
            }
        }
    
        for(int i=0; i<n; i++) {
            if(fa[i] != i)
                fa[i] = findset(fa[i]);
        }
    
        printf("[");
        bool first=true;
    
        for(int i=0; i<n; i++) {
            if(fa[i] == i) {
                if(first == false)
                    printf(", ");
                first = false;
                printf("[");
                printf("%d", i);
                for(int j=i+1; j<n; j++) {
                    if(fa[j] == i)
                        printf(", %d", j);
                }
                printf("]");
            }
        }
        printf("]
    ");
        return 0;
    }
    

     

    [编程题] 弹幕

    时间限制:2秒

    空间限制:49152K

    弹幕是现今网络视频常见的评论方式,能够反映一个视频的火爆程度。假设某个时间一共有N条弹幕,每条弹幕i的持续时间为两个整数表示的时间区间(a[i],b[i]),我们定义弹幕数量最多的一个时间段为最精彩时段,求一个视频的最精彩时段。


    输入描述:
    第一行整数N,代表弹幕的条数,其中90%的 N < 1000000, 60%的N < 10000
    第二行到第N+1行,是两个整数(a[i],b[i]),代表每条弹幕的开始时间和结束时间, 请注意(a[i],b[i])是全开区间, 并且a[i], b[i] < 100

    输出描述:
    M行,每行两个整数(c,d),M是答案个数,(c,d)代表视频最精彩时段的开始时间和结束时间,并且M个答案区间互不重叠。答案请按照开始时间从小到大输出。请注意每行结尾应包含换行符,包括最后一行。

     输入输出的样例参见牛客网的题目

    通过的代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <math.h>
    #include <set>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    int f[1000001];
    set<int>bound;
    int main()
    {
        int n;
        scanf("%d", &n);
        memset(f, 0, sizeof(f));
        while(n--) {
            int a, b;
            scanf("%d %d", &a, &b);
            bound.insert(a);
            bound.insert(b);
            for(int i=a+1; i<=b; i++)
                f[i]++;
        }
        int big = 0;
        for(int i=0; i<100; i++) {
            if(f[i] > big)
                big = f[i];
        }
        int left, right;
        for(int i=1; i<100; i++) {
            if(f[i] == big) {
                left = i-1;
                int j=i;
                while(f[j] == big && bound.find(j) == bound.end()) {
                    j++;
                }
                right = j;
                // printf("***
    ");
                printf("%d %d
    ", left, right);
                i=j;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    推荐系统中的策略与算法互补
    思考:数据结构与算法:
    思考:代码中什么是关联?什么情形才会关联?怎么实现关联?
    思考:高并发(通用的成熟的)解决思想
    思考:学习一个知识后如何对自己进行测试?如何出题呢?
    不要小看用的好用的熟,因为这需要更好的理解和应用
    打了好久五笔,速度提不起来怎么办?
    学习 APPIUM 元素定位 (JAVA)-xpath
    appium 元素定位方法
    uiautomatorviewer 定位提示Error obtaining UI hierarchy
  • 原文地址:https://www.cnblogs.com/yspworld/p/10627223.html
Copyright © 2011-2022 走看看