2 条题解
-
0
#include <iostream> #include <vector> #include <map> using namespace std; struct UpDownSell { int up; vector<int> down; int sell; UpDownSell(int up,vector<int> down,int sell) { this->up=up; this->down=down; this->sell=sell; } }; // 返回要提交的钱 int handIn(int num) { return (num/100)*15; } // 返回指定id的员工可以获得的钱 int howMuchGet(int id,map<int,UpDownSell> allSellers) { // 定位到该员工 map<int,UpDownSell>::iterator it=allSellers.find(id); if(it!=allSellers.end()) { int get=it->second.sell; for(auto down:it->second.down) { int downGet=howMuchGet(down,allSellers); get+=handIn(downGet); } return get; } else { return 0; } } //key代表id,数组三个数分别代表上级、下级、销售额 map<int,UpDownSell> allSellers; int main(int argc, char *argv[]) { // 初始化老板的数据 UpDownSell boss(-1,vector<int>(0,-1),0); allSellers.insert(make_pair(0,boss)); int sellerAmount; cin>>sellerAmount; for(int i=0;i<sellerAmount;i++) { // id,上级和销售额 int id,up,sell; cin>>id>>up>>sell; // 写入数据 UpDownSell temp(up,vector<int>(0,-1),sell); allSellers.insert(make_pair(id,temp)); } // 构建树 for(map<int,UpDownSell>::iterator it=allSellers.begin(); it!=allSellers.end(); it++) { // 找到上级,然后标记下级 map<int,UpDownSell>::iterator shangJi=allSellers.find(it->second.up); if(shangJi!=allSellers.end()) { shangJi->second.down.push_back(it->first); } } cout<<"0 "<<howMuchGet(0,allSellers); }
-
0
#include <iostream> #include <vector> using namespace std; struct number { int higher;//上级 int salary;//工资 vector<int> lower;//下级数组 };//boss或员工结构体 vector<number> numbers(65536);//boss和员工数量上限为65536 int pay(number tzy,vector<number>& numbers) {//pay函数计算需要上交给上级的工资 if (tzy.higher != -100) { for (int i = 0; i < tzy.lower.size(); i++) { tzy.salary += pay(numbers[tzy.lower[i]], numbers); } return tzy.salary / 100 * 15; } else return 0; } int main() { int n; cin >> n;//输入员工数量 numbers[0] = { -1, 0 , {} };//初始化boss for (int i = 1; i < 65536; i++) { numbers[i] = { -100, -100, {} }; }//初始化员工(-100表示没有上级) while (n--) { int id, higher, salary; cin >> id >> higher >> salary; numbers[id] = { higher, salary, {} }; numbers[higher].lower.push_back(id); }//输入员工信息,并建立上下级关系 int bosssalary = 0; for (int i = 0; i < numbers[0].lower.size(); i++) { bosssalary += pay(numbers[numbers[0].lower[i]], numbers); }//计算boss的工资 cout << "0 " << bosssalary << endl; return 0; }
- 1
信息
- ID
- 54
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 282
- 已通过
- 63
- 上传者