第二题 //用弗洛伊德算法思想 #include <iostream> #include <string> #include <vector> #include <algorithm> #include <map> using namespace std; vector<int> label; vector<int> dataIndex; void AddDependency(unsigned int Moduled, unsigned int DeModuled) { for(int i = 0; i < label.size(); ++i) { if(Moduled == label[i]) { dataIndex.push_back(Moduled); break; } } for(int j = 0; j < label.size(); ++j) { if(DeModuled == label[j]) { dataIndex.push_back(DeModuled); break; } } } int main() { vector<string> input; vector<int> result; string temp; while(getline(cin, temp)) { input.push_back(temp); } int len = input.size(); for(int i = 0; i < len; i++) { temp = input[i]; int k = 3; int num = 0; while(temp[k] != ',') { if(temp[k] >= '0' && temp[k] <= '9') { num = num * 16 + temp[k] - '0'; k++; } else { num = num * 16 + temp[k] - 'a'; k++; } } result.push_back(num); num = 0; k = k + 4; while(temp[k] != '}') { if(temp[k] >= '0' && temp[k] <= '9') { num = num * 16 + temp[k] - '0'; k++; } else { num = num * 16 + temp[k] - 'a'; k++; } } result.push_back(num); num = 0; } vector<int> result_temp(result); sort(result_temp.begin(), result_temp.end()); label.push_back(result_temp[0]); for(int i = 1; i < result_temp.size(); i++) { if(result_temp[i] != result_temp[i-1]) label.push_back(result_temp[i]); } for(int i = 0; i < result.size()-1; i += 2) { AddDependency(result[i], result[i+1]); } int **arr = new int*[label.size()]; for(int i = 0; i < label.size(); i++) arr[i] = new int[label.size()]; //初始化数组为全0; for(int i = 0; i < label.size(); i++) for(int j = 0; j < label.size(); j++) arr[i][j] = 0; for(int i = 0; i < result.size()-1; i += 2) { arr[dataIndex[i]-1][dataIndex[i+1]-1] = 1; } for(int i = 0; i < label.size(); i++) { for(int j = 0; j < label.size(); j++) { for(int k = 0; k < label.size(); k++) { if(arr[j][i] == 1 && arr[i][k] == 1) { arr[j][k] = 1; } } } } //输出的格式没有调 for(int i = 0; i < label.size(); ++i) { if(arr[i][i] == 1) cout << label[i] << endl; } //最后需要释放内存 return 0; }
点赞 1

相关推荐

国庆前意向邮件,到现在还没后续合理吗,也没交流群和对接人&nbsp;有没有9.30意向那波的友友现在有后续消息了
Adventure_:10月下旬问过一次,10月底问过一次,说是最快1-2天就会开始谈薪了,但目前看来,还是没等到。两次电话的hr反馈基本都是国央企相对来说政策和审批会更严谨一些、更规范化流程一些,目前还在审批流程中,等定下来,就会开始谈薪和发正式offer
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-07 16:54
点赞 评论 收藏
分享
我现在真的不知道是我的问题还是中国整体应届生的编程水平已经达到了我无法想象的程度了3道编程题一道都做不出来。我好歹也是刷了400多道题,做欧洲的笔试基本都是全对,砍瓜切菜,简单的不能再简单,虽然笔试全对结束也不给面试现在我已经遇到了三家中国公司,我笔试一道都做不出来的情况,分别是华为,菜鸟,oppo,有的时候我真的好奇到底是我的问题,还是中国公司的问题,还是社会的问题?为什么我刷了400题仍然是路边一条的水平?还是说我天赋太差了,转行才是出路。下面来介绍一下题目1.&nbsp;给n个数,加号可以变成减号,问有多少种方法使得a0+a1+...+an-1的值小于t。用dp做,结果对了10%,感觉逻辑写的有问题2.&nbsp;给一串数字,a0,a1,...,an-1得出移除每个数之后,能得到的最小的非负整数。ai的数量和值都特别大,做的超时,过20%。数字未排序3.&nbsp;给一个字符串,比如213221????9098,&nbsp;?????234?21,问有多少种办法把?变成某个数字之后,使得这个字符串可以被3整除?还要考虑先导0问题。这题太变态了,随随便便干到10的十几次方,暴力根本不可能,我也不知道要怎么办,可能是数学问题,但当时没时间了,直接放弃目前笔试里面做出来的只有美团和盒马,美团一面挂,盒马一面后装死。做出来的也没有3道全对的,能对1.5已经算好的,这让我非常怀疑到底是谁的问题,为什么大家都说我做0分的笔试非常简单,基本做出两道,这些人又是怎么练习的?真的非常疑惑,难道真得转行
查看3道真题和解析 投递OPPO等公司10个岗位
点赞 评论 收藏
分享
牛客网
牛客企业服务