愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

PAT4:程序猿和产品狗

在公司里面,程序猿经常有一堆todolist要做,而这些todolist是产品经理分配给他们的。但是当程序员遇到不懂技术的产品狗时,就悲剧了。产品经理经常修改他们的todolist,比如:添加,减少他们的todolist。
请设计一个类CodeMonkey ,表示程序猿,另一个类ProductDog,表示产品经理。

CodeMonkey类有私有成员 name,todolist。
构造函数初始化姓名和todolist,公有函数 int sizeof_todolist(),
来自ProductDog类的友元函数add_todolist(CodeMonkey&,int),reduce_todolist(CodeMonkey& , int);
ProductDog类有公有函数 add_todolist(CodeMonkey&,int),reduce_todolist(CodeMonkey& , int)

Input Specification

每个测试文件包含一组测试用例,对于每个测试用例,第一行输入 n (1<= n <= 10^6)表示有n个程序员,接下去n行,每行为: name x 表示名为name的程序员的todolist的长度为x。 接下去一行 m (1<=m<=10^6),表示产品经理分配任务的次数。 接下去m行,每行为 name opt x , opt 为 0 表示名为name的程序猿的todolist增加x,opt为 1 表示减少x。 输入数据保证合法性。

Output Specification

对于每个程序员,请输出 name x,x表示最终的todolist长度。按输入顺序输出。
Sample Input:

3
Jack 1
Luck 2
Tom 3
4
Tom 0 100
Luck 0 50
Jack 0 25
Tom 1 50

Sample Output:

Jack 26
Luck 52
Tom 53

#include <iostream>
#include <map>
using namespace std;

class CodeMonkey;
class ProductDog {
public:
    void add_todolist(CodeMonkey &, int);
    void reduce_todolist(CodeMonkey &, int);
};

class CodeMonkey {
public:
    void set(string _name, int _todolist) {
        name = _name;
        todolist = _todolist;
    }
    int sizeof_todolist() {
        return this->todolist;
    }
    string getName() {
        return this->name;
    }
    friend void ProductDog::add_todolist(CodeMonkey &, int);
    friend void ProductDog::reduce_todolist(CodeMonkey &, int);
private:
    string name;
    int todolist;
};

void ProductDog::add_todolist(CodeMonkey & c, int m) { c.todolist+=m; }
void ProductDog::reduce_todolist(CodeMonkey & c, int m) { c.todolist-=m; }

int main() {
    int i,n;
    cin >> n;
    CodeMonkey * coders = new CodeMonkey[n];
    map<string, int> index;
    for(i=0; i<n; i++) {
        string name;
        int todolist;
        cin >> name >> todolist;
        coders[i].set(name, todolist);
        index[name] = i;
    }
    int m;
    cin >> m;
    ProductDog pd;
    while (m>0) {
        string name;
        int op,amount;
        cin >> name >> op >> amount;
        if(op==0) pd.add_todolist(coders[index[name]], amount);
        else pd.reduce_todolist(coders[index[name]], amount);
        m--;
    }
    for(i=0; i<n; i++) {
        cout << coders[i].getName() << " " << coders[i].sizeof_todolist() << endl;
    }
    delete [] coders;
    
    return 0;
}