zoukankan      html  css  js  c++  java
  • 【招行】信用卡推荐用户列表 数据岗

    ■題目描述
    现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户同时属于A和B的推荐列表。简单起见,只考虑一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。
    ■输入描述
    输入的第一行为以空格分隔的两个正整数,第一个表示原始推荐列表的 个数m,第二个表示n的取值。
    其后m每行均为一个以空格分隔的原始推荐列表,第一列为推荐人,后面两列为被推荐人,若该推荐人只推荐了一个新户,则第三列以*替代。 推荐人和被推荐人均以大写字母表示,不同字母代表不同的人。
    ■输出描述:
    在同一行输出符合条件的客户列表,无顺序要求,客户间以空格分隔。 若客户列表为空,则输出None。详见祥例。

     示例1

    输入:

    5 2

    A  B  C

    C  F  *

    B  D  E 

    D  G  *

    E  H  I  

    输出

    A  B  E

    解题思路:

    由于链接效应,比较适合的就有链表结构,二叉树结构和递归。

    Solution 1

    #include <vector>
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;
     
    int OutputBigClient(map<string, pair<string, string>> &r, int n,
        string &head, vector<string> &output){
     
        if (head == "*")    return -1;
        if (r.find(head) == r.end()){
            if (n == 0)    output.push_back(head);
            return 0;
        }
        int ans = 2;
        ans += OutputBigClient(r, n, r[head].first, output);
        ans += OutputBigClient(r, n, r[head].second, output);
        if (ans >= n)
            output.push_back(head);
        return ans;
    }
    int main() {
        int m, n;
        cin >> m;
        cin >> n;
        map<string, pair<string, string>> rec_list;
        vector<string> output;
        string x, y, z;
        for (int i = 0; i < m; i++){
            cin >> x >> y >> z;
            rec_list[x] = make_pair(y, z);
        }
        x = "A";
        OutputBigClient(rec_list, n, x, output);
        if (!output.empty()){
            cout << output[0];
            for (int i = 1; i < output.size(); ++i){
                cout << " " << output[i];
            }
            cout << endl;
        }
        else
        {
            cout << "None" << endl;
        }
        //system("Pause");
        return 0;
    }

    (作者:吃橘子不吐皮
    链接:https://www.nowcoder.com/discuss/41237
    来源:牛客网)

    Solution 2

    m, n= [int(i) for i in raw_input().split()]
     
    referDict = {}
    for _ in range(m):
        referList = raw_input().strip().split()
        if referList[0] not in referDict:
            referDict[referList[0]] = '*'
        if not referList[1] == '*':
            referDict[referList[1]] = referList[0]
        if not referList[2] == '*':
            referDict[referList[2]] = referList[0]
     
    referNum = {i:0 for i in referDict.keys()}
     
    for i in referDict:
        aa= i
        while referDict[aa] in referNum:
            aa = referDict[aa]
            referNum[aa] += 1
     
    resultList = []
    for k,v in referNum.iteritems():
        if v>=n:
            resultList.append(k)
     
    if len(resultList)==0:
        print "None"
    else:
        print " ".join(resultList)
    (作者:呵呵了呀
    链接:https://www.nowcoder.com/discuss/41134
    来源:牛客网)
  • 相关阅读:
    metal的gpu query
    体积雾 global fog unity 及改进
    hdr rt format对颜色的影响
    unity deferred lighting
    unity linear space时 photoshop blend的正确设置
    unity linear work flow
    一些数据 bandwidth之类
    deferred rendering with msaa
    unity 显示mipmaplevel
    【转】在C#中使用SendMessage
  • 原文地址:https://www.cnblogs.com/Atanisi/p/7524863.html
Copyright © 2011-2022 走看看