• 今日头条2017校园招聘 春招4.18笔试


    两数组找相同的元素-array
    时间限制:C/C++语言 1000MS;其他语言 3000MS
    内存限制:C/C++语言 65536KB;其他语言 589824KB
    题目描述:
    给两个整数(int)数组,输出相同的元素。
    输入
    给定两个整型数组[a1, a2, ...., am],[b1, b2, ..., bn]
    输入格式如下,第一行给定第一个数组的大小m,接下来的m行为其数组元素a1 -- am,每行一个元素;第m+1行为第二个数组的大小n,接下来的n行为其数组元素b1 -- bn,也是每行一个元素。示例如下:
    m
    a1
    a2

    am
    n
    b1
    b2

    bn

    输出
    两个数组中相同的元素,以空格分隔在一行中显示,显示顺序为其在第二个数组中出现的顺序。

    样例输入
    5
    11
    15
    9
    12
    3
    4
    11
    3
    9
    7

    样例输出
    11 3 9

    开始用cin cout然后一直超时 苦思好久= =智障日常

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        freopen("in.txt", "r", stdin);
        int n, m;
        int x;
        bool first = true;
        set<int> a;
        scanf("%d", &n);
        for (int i = 0; i < n; ++i) scanf("%d", &x), a.insert(x);
        scanf("%d", &m);
        for (int i = 0; i < m; ++i) {
            scanf("%d", &x);
            if (a.find(x) != a.end()) {
                if (first) first = false; else printf(" ");
                printf("%d", x);
            }
        }
        return 0;
    }
    View Code

    DAU 统计
    时间限制:C/C++语言 2000MS;其他语言 4000MS
    内存限制:C/C++语言 32768KB;其他语言 557056KB
    题目描述:
    日活跃用户数 (DAU) 是衡量一个产品表现的重要指标。
    需要编写程序,根据给定的某一天的 N 条访问记录,对当天的用户总数 M 进行统计。
    每个用户可能访问多次。
    为了方便,我们用数字 (uid) 唯一标识每个用户。
    输入
    每一行包含一个 uid,遇到 0 时认为输入结束。
    输入共包含 N+1 行,可认为是无序的。
    输出
    一个数字:去重后 uid 的数量 M。

    样例输入
    12933
    111111
    59220
    69433
    59220
    111111
    0
    样例输出
    4

    Hint
    数据范围
    0 < uid < 2^63
    对于 30% 的数据,0 < N < 100,000, 0 < M < 100,000
    对于 100% 的数据,0 < N < 1,000,000, 0 < M < 800,000

    统计不重复的数字,利用set就可以了= =也是简单题

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        std::ios::sync_with_stdio(false);
        long long x;
        set<long long> st;
        while (cin >> x) {
            if (x == 0) break;
            st.insert(x);
        }
        cout << st.size();
        return 0;
    }
    View Code
    形式化算式
    时间限制:C/C++语言 1000MS;其他语言 3000MS
    内存限制:C/C++语言 65536KB;其他语言 589824KB
    题目描述:
    我们有如下形式化的数字
      *    ***   ***   * *   ***   ***   ***   ***   ***   ***
      *      *     *   * *   *     *       *   * *   * *   * *
      *    ***   ***   ***   ***   ***     *   ***   ***   * *
      *    *       *     *     *   * *     *   * *     *   * *
      *    ***   ***     *   ***   ***     *   ***   ***   **** 下附图片供参考)
    
    分别表示 1 2 3 4 5 6 7 8 9 0
    有如下形式化的符号:
       *        * *    *   ****
      ***  ***   *    *
       *        * *  *     ****   **
                                  **
    ​(* 下附图片供参考)
    
    分别表示 + - * / = 小数点
    输入
    现在 将输入一个算式
    输出
    你要将该算式计算之后按照上述形式化的方式输出
    各个数字和符号之间空两格
    无法整除则保留两位小数
    
    样例输入
    10 + 31
    样例输出
    *  ***       ***  *        * *  *
    *  * *   *     *  *  ****  * *  *
    *  * *  ***  ***  *        ***  *
    *  * *   *     *  *  ****    *  *
    *  ***       ***  *          *  *
    ​(* 下附图片供参考)
    
    
    Hint
    样例输入2:
    25
    样例输出2:
    ***       ***        ***      * *
      *    *  *    ****  * *      * *
    ***   *   ***        * *      ***
    *    *      *  ****  * *  **    *
    ***       ***        ***  **    *
    ​(* 下附图片供参考)
    
    数据范围:
    20%的数据 输入的数字和运算结果都是个位数
    100%的数据保证 输入数字和答案都小于10000
    100%的数据保证 输入数字不会出现小数
    80%的数据保证 运算结果不会出现小数

    第三题就是个大模拟,有点恶心就是了,写了半个多小时、、、、

    #include<bits/stdc++.h>
    using namespace std;
    
    string digit[10][5];
    string opr[6][5];   // + - * / = .
    
    
    void init() {
        digit[0][0] = "***";
        digit[0][1] = "* *";
        digit[0][2] = "* *";
        digit[0][3] = "* *";
        digit[0][4] = "***";
    
        digit[1][0] = "*";
        digit[1][1] = "*";
        digit[1][2] = "*";
        digit[1][3] = "*";
        digit[1][4] = "*";
    
        digit[2][0] = "***";
        digit[2][1] = "  *";
        digit[2][2] = "***";
        digit[2][3] = "*  ";
        digit[2][4] = "***";
    
        digit[3][0] = "***";
        digit[3][1] = "  *";
        digit[3][2] = "***";
        digit[3][3] = "  *";
        digit[3][4] = "***";
    
    
        digit[4][0] = "* *";
        digit[4][1] = "* *";
        digit[4][2] = "***";
        digit[4][3] = "  *";
        digit[4][4] = "  *";
    
        digit[5][0] = "***";
        digit[5][1] = "*  ";
        digit[5][2] = "***";
        digit[5][3] = "  *";
        digit[5][4] = "***";
    
        digit[6][0] = "***";
        digit[6][1] = "*  ";
        digit[6][2] = "***";
        digit[6][3] = "* *";
        digit[6][4] = "***";
    
        digit[7][0] = "***";
        digit[7][1] = "  *";
        digit[7][2] = "  *";
        digit[7][3] = "  *";
        digit[7][4] = "  *";
    
        digit[8][0] = "***";
        digit[8][1] = "* *";
        digit[8][2] = "***";
        digit[8][3] = "* *";
        digit[8][4] = "***";
    
        digit[9][0] = "***";
        digit[9][1] = "* *";
        digit[9][2] = "***";
        digit[9][3] = "  *";
        digit[9][4] = "***";
    
        opr[0][0] = "   ";
        opr[0][1] = " * ";
        opr[0][2] = "***";
        opr[0][3] = " * ";
        opr[0][4] = "   ";
    
        opr[1][0] = "   ";
        opr[1][1] = "   ";
        opr[1][2] = "***";
        opr[1][3] = "   ";
        opr[1][4] = "   ";
    
        opr[2][0] = "   ";
        opr[2][1] = "* *";
        opr[2][2] = " * ";
        opr[2][3] = "* *";
        opr[2][4] = "   ";
    
        opr[3][0] = "   ";
        opr[3][1] = "  *";
        opr[3][2] = " * ";
        opr[3][3] = "*  ";
        opr[3][4] = "   ";
    
        opr[4][0] = "    ";
        opr[4][1] = "****";
        opr[4][2] = "    ";
        opr[4][3] = "****";
        opr[4][4] = "    ";
    
        opr[5][0] = "  ";
        opr[5][1] = "  ";
        opr[5][2] = "  ";
        opr[5][3] = "**";
        opr[5][4] = "**";
    
    }
    //
    //   *        * *    *   ****
    //  ***  ***   *    *
    //   *        * *  *     ****   **
    //                              **
    
    //  *    ***   ***   * *   ***   ***   ***   ***   ***   ***
    //  *      *     *   * *   *     *       *   * *   * *   * *
    //  *    ***   ***   ***   ***   ***     *   ***   ***   * *
    //  *    *       *     *     *   * *     *   * *     *   * *
    //  *    ***   ***     *   ***   ***     *   ***   ***   ***
    
    void print_num(int x, int p) {   // 输出数字x的第p行
    
        int dig[10], idx = 0;
        do {
           dig[idx++] = x % 10;
           x /= 10;
        } while (x);
    
    //    for (int i = idx-1; i >= 0; --i) {
    //        printf("%d", dig[i]);
    //        if (i) printf(" ");
    //    }
    //    printf("
    ");
    
        for (int i = idx-1; i >= 0; --i) {
            cout << digit[ dig[i] ][p];
            if (i) cout << "  ";
        }
    
    }
    
    
    void print_double(double x, int p) {   // 输出数字x的第p行
        int x1 = x;
        int x2 = ceil((x - x1) * 100);
    
        int dig[10], idx = 0;
        do {
           dig[idx++] = x1 % 10;
           x1 /= 10;
        } while (x1);
    
    
    
        for (int i = idx-1; i >= 0; --i) {
            cout << digit[ dig[i] ][p];
            cout << "  ";
        }
        cout << opr[5][p];
        cout << "  ";
        cout << digit[ x2 / 10 ][p];
        if (x2 % 10 != 0) {
            cout << "  ";
            cout << digit[ x2 % 10 ][p];
        }
    
    }
    
    
    int main()
    {
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        int a, b, ans;
        char op;
    
        init();
    
        //print_num(120, 0);
    
        scanf("%d%*c%c%*c%d", &a, &op, &b);
    
        //printf("%d %c %d
    ", a, op, b);
    
        if (op == '+') {
            ans = a + b;
            for (int i = 0; i < 5; ++i) {
                print_num(a, i);
                printf(" ");
                printf(" ");
                cout << opr[0][i];
                printf(" ");
                printf(" ");
                print_num(b, i);
                printf(" ");
                printf(" ");
                cout << opr[4][i];
                printf(" ");
                printf(" ");
                print_num(ans, i);
                printf("
    ");
            }
        } else if (op == '-') {
            ans = a - b; bool mi = false;
            if (ans < 0) mi = true, ans = -ans;
            for (int i = 0; i < 5; ++i) {
                print_num(a, i);
                printf(" ");
                printf(" ");
                cout << opr[1][i];
                printf(" ");
                printf(" ");
                print_num(b, i);
                printf(" ");
                printf(" ");
                cout << opr[4][i];
                printf(" ");
                printf(" ");
    
                if (mi) {
                    cout << opr[1][i];
                    printf(" ");
                    printf(" ");
                }
    
                print_num(ans, i);
                printf("
    ");
            }
        } else if (op == '*') {
            ans = a * b;
            for (int i = 0; i < 5; ++i) {
                print_num(a, i);
                printf(" ");
                printf(" ");
                cout << opr[2][i];
                printf(" ");
                printf(" ");
                print_num(b, i);
                printf(" ");
                printf(" ");
                cout << opr[4][i];
                printf(" ");
                printf(" ");
                print_num(ans, i);
                printf("
    ");
            }
        } else {
            if (a % b == 0) {
                ans = a / b;
                for (int i = 0; i < 5; ++i) {
                    print_num(a, i);
                    printf(" ");
                    printf(" ");
                    cout << opr[3][i];
                    printf(" ");
                    printf(" ");
                    print_num(b, i);
                    printf(" ");
                    printf(" ");
                    cout << opr[4][i];
                    printf(" ");
                    printf(" ");
                    print_num(ans, i);
                    printf("
    ");
                }
            } else {
                double fans = (double)a / b;
                //printf("%f", fans);
                for (int i = 0; i < 5; ++i) {
                    print_num(a, i);
                    printf(" ");
                    printf(" ");
                    cout << opr[3][i];
                    printf(" ");
                    printf(" ");
                    print_num(b, i);
                    printf(" ");
                    printf(" ");
                    cout << opr[4][i];
                    printf(" ");
                    printf(" ");
                    print_double(fans, i);
                    printf("
    ");
                }
            }
        }
    
        return 0;
    }
    View Code

    第四题:任务执行策略

     

     呜呜呜好难啊,干瞪眼一个小时没思路,最后暴力一发还TLE没分= =

    官方题解:

    动态规划题。首先把三角形翻转一下,从底部来考虑每个元素。dp[i][j][k]表示考虑到第(i,j)个,当前选取了k个元素的最大值。前缀和维护最大值,就可以把转移优化到O(1)。

    #include <algorithm>
    #include <cassert>
    #include <cstring>
    #include <cstdio>
    
    const int N = 60;
    const int M = 500 + 10;
    
    int dp[N][N][M], sum[N][N], a[N][N], n, m;
    
    int main() {
        assert(scanf("%d%d", &n, &m) == 2);
        assert(1 <= n && n <= 50);
        assert(1 <= m && m <= 500);
        for (int i = 1; i <= n; ++ i) {
            for (int j = 1; j <= i; ++ j) {
                assert(scanf("%d", &a[i][j]) == 1);
                assert(0 <= a[i][j] && a[i][j] <= 1000);
            }
        }
    
        for (int i = 1; i <= n; ++ i) {
            for (int j = 1; j <= i; ++ j) {
                sum[i][j] = sum[i][j - 1] + a[n - j + 1][i - j + 1];
            }
        }
    
        memset(dp, 200, sizeof(dp));
        for (int i = 0; i <= n; ++ i) {
            dp[i][0][0] = 0;
        }
        for (int i = 1; i <= n; ++ i) {
            for (int j = i; j >= 0; -- j) {
                for (int k = j; k <= m; ++ k) {
                    dp[i][j][k] = std::max(dp[i][j + 1][k],
                                           dp[i - 1][std::max(0, j - 1)][k - j] + sum[i][j]);
                }
            }
        }
        printf("%d
    ", dp[n][0][m]);
        return 0;
    }
  • 相关阅读:
    Cookie
    精英讲师培训笔记03-如何与台下观众有效互动
    精英讲师培训笔记02-培训师手势如何做
    精英讲师培训笔记01-提升口才的三个心法
    "怒海争锋"沙盘培训思考
    logback问题集
    spring boot2 启动过程
    Connect reset
    ELK 安装及使用
    常用中文教程网站
  • 原文地址:https://www.cnblogs.com/wenruo/p/6730544.html
Copyright © 2020-2023  润新知