2 条题解

  • 0
    @ 2025-4-5 11:03:15
    #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
      @ 2025-2-3 12:47:37
      #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
      上传者