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
    来源:牛客网)
  • 相关阅读:
    性能测试随笔,看看罢了,只做笑谈尔。
    谈性能指标测试
    协议初解
    LR手工制作接口类脚本
    一天学一个模式_第五天:门面模式
    Oracle日常操作小常识(持续更新)
    什么是“GB/T ”? 计算机术语你又知道多少? 想不想别人听不懂的语言搞定别人!
    Silverlight 4 Tools for VS 2010 发布倒计时
    微软一站式示例代码库 4 月小结
    微软一站式示例代码库 20100430 新增代码示例简介
  • 原文地址:https://www.cnblogs.com/Atanisi/p/7524863.html
Copyright © 2011-2022 走看看