■題目描述
现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户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
来源:牛客网)